## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
## randomForest 4.6-14
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var

Introduction des données

Le jeu de données qui sera étudié dans ce projet décrit le relevé de satisfaction de passagers en avion. Il contient les notes attribuées (entre 0 et 5) pour différents services ainsi que les catégories et profil des voyageur. Tout ceci dans le but de prédir leur satisfaction.

On voit que les deux premières colonnes (X & id) sont inutiles pour nos analyses, on va donc les supprimer.

DF.train <- read.csv("data/train.csv")
DF.test <- read.csv("data/test.csv")
# On supprime les lignes ou il y a des valeurs manquantes.
DF.train <- DF.train[!rowMeans(is.na(DF.train)*1) > 0,]
DF.test <- DF.test[!rowMeans(is.na(DF.test)*1) > 0,]
str(DF.train)
## 'data.frame':    103594 obs. of  25 variables:
##  $ X                                : int  0 1 2 3 4 5 6 7 8 9 ...
##  $ id                               : int  70172 5047 110028 24026 119299 111157 82113 96462 79485 65725 ...
##  $ Gender                           : chr  "Male" "Male" "Female" "Female" ...
##  $ Customer.Type                    : chr  "Loyal Customer" "disloyal Customer" "Loyal Customer" "Loyal Customer" ...
##  $ Age                              : int  13 25 26 25 61 26 47 52 41 20 ...
##  $ Type.of.Travel                   : chr  "Personal Travel" "Business travel" "Business travel" "Business travel" ...
##  $ Class                            : chr  "Eco Plus" "Business" "Business" "Business" ...
##  $ Flight.Distance                  : int  460 235 1142 562 214 1180 1276 2035 853 1061 ...
##  $ Inflight.wifi.service            : int  3 3 2 2 3 3 2 4 1 3 ...
##  $ Departure.Arrival.time.convenient: int  4 2 2 5 3 4 4 3 2 3 ...
##  $ Ease.of.Online.booking           : int  3 3 2 5 3 2 2 4 2 3 ...
##  $ Gate.location                    : int  1 3 2 5 3 1 3 4 2 4 ...
##  $ Food.and.drink                   : int  5 1 5 2 4 1 2 5 4 2 ...
##  $ Online.boarding                  : int  3 3 5 2 5 2 2 5 3 3 ...
##  $ Seat.comfort                     : int  5 1 5 2 5 1 2 5 3 3 ...
##  $ Inflight.entertainment           : int  5 1 5 2 3 1 2 5 1 2 ...
##  $ On.board.service                 : int  4 1 4 2 3 3 3 5 1 2 ...
##  $ Leg.room.service                 : int  3 5 3 5 4 4 3 5 2 3 ...
##  $ Baggage.handling                 : int  4 3 4 3 4 4 4 5 1 4 ...
##  $ Checkin.service                  : int  4 1 4 1 3 4 3 4 4 4 ...
##  $ Inflight.service                 : int  5 4 4 4 3 4 5 5 1 3 ...
##  $ Cleanliness                      : int  5 1 5 2 3 1 2 4 2 2 ...
##  $ Departure.Delay.in.Minutes       : int  25 1 0 11 0 0 9 4 0 0 ...
##  $ Arrival.Delay.in.Minutes         : num  18 6 0 9 0 0 23 0 0 0 ...
##  $ satisfaction                     : chr  "neutral or dissatisfied" "neutral or dissatisfied" "satisfied" "neutral or dissatisfied" ...
# On retire les colonnes inutiles.
DF.train <- DF.train[,c(-1,-2)]
DF.test <- DF.test[,c(-1,-2)]
# On modifie le nom des lignes pour le style ;-)
row.names(DF.train) <- paste("n°", sep="", 1:dim(DF.train)[1]) 
row.names(DF.test) <- paste("n°", sep="", 1:dim(DF.test)[1]) 
# On renomme les colonnes pour avoir des noms moins longs (Utile pour l'affichage).
colnames(DF.train) <- c("Genre", "Fidélité", "Age", "Type.du.vol", "Classe", "Distance", "Wifi", "Horaire.pratique", "Facilité.resevation", "Emplacement.porte", "Nourriture", "Enregistrement.en.ligne", "Siege.confort", "Loisir", "On.board.service", "Espace.jambe", "Gestion.bagage", "Checkin.service", "Inflight.service", "Propreté", "Retard.depart", "Retard.arrivé", "Satisfaction")
colnames(DF.test) <- c("Genre", "Fidélité", "Age", "Type.du.vol", "Classe", "Distance", "Wifi", "Horaire.pratique", "Facilité.resevation", "Emplacement.porte", "Nourriture", "Enregistrement.en.ligne", "Siege.confort", "Loisir", "On.board.service", "Espace.jambe", "Gestion.bagage", "Checkin.service", "Inflight.service", "Propreté", "Retard.depart", "Retard.arrivé", "Satisfaction")

Petit avant gout des données :

ON s’intéresse aux notes attribuées par les passagers. Ci-dessous on voit que les notes sont assez homogènes, elles ont toutes :

##       Wifi      Horaire.pratique Facilité.resevation Emplacement.porte
##  Min.   :0.00   Min.   :0.00     Min.   :0.000       Min.   :0.000    
##  1st Qu.:2.00   1st Qu.:2.00     1st Qu.:2.000       1st Qu.:2.000    
##  Median :3.00   Median :3.00     Median :3.000       Median :3.000    
##  Mean   :2.73   Mean   :3.06     Mean   :2.757       Mean   :2.977    
##  3rd Qu.:4.00   3rd Qu.:4.00     3rd Qu.:4.000       3rd Qu.:4.000    
##  Max.   :5.00   Max.   :5.00     Max.   :5.000       Max.   :5.000    
##    Nourriture    Enregistrement.en.ligne Siege.confort      Loisir     
##  Min.   :0.000   Min.   :0.00            Min.   :0.00   Min.   :0.000  
##  1st Qu.:2.000   1st Qu.:2.00            1st Qu.:2.00   1st Qu.:2.000  
##  Median :3.000   Median :3.00            Median :4.00   Median :4.000  
##  Mean   :3.202   Mean   :3.25            Mean   :3.44   Mean   :3.358  
##  3rd Qu.:4.000   3rd Qu.:4.00            3rd Qu.:5.00   3rd Qu.:4.000  
##  Max.   :5.000   Max.   :5.00            Max.   :5.00   Max.   :5.000  
##  On.board.service  Espace.jambe   Gestion.bagage  Checkin.service
##  Min.   :0.000    Min.   :0.000   Min.   :1.000   Min.   :0.000  
##  1st Qu.:2.000    1st Qu.:2.000   1st Qu.:3.000   1st Qu.:3.000  
##  Median :4.000    Median :4.000   Median :4.000   Median :3.000  
##  Mean   :3.383    Mean   :3.351   Mean   :3.632   Mean   :3.304  
##  3rd Qu.:4.000    3rd Qu.:4.000   3rd Qu.:5.000   3rd Qu.:4.000  
##  Max.   :5.000    Max.   :5.000   Max.   :5.000   Max.   :5.000  
##  Inflight.service    Propreté    
##  Min.   :0.000    Min.   :0.000  
##  1st Qu.:3.000    1st Qu.:2.000  
##  Median :4.000    Median :3.000  
##  Mean   :3.641    Mean   :3.286  
##  3rd Qu.:5.000    3rd Qu.:4.000  
##  Max.   :5.000    Max.   :5.000

On peut aussi observer les autres variables quantitatives :

Analyse des données

On commence notre analyse par une ACP sur les variables quantitatives.

Méthodes fatorielles

ACP

On récupère toutes les données quantitatives et la satisfaction.

# On récupère Âge/Distance du vol/Retard Depart/Retard Arrivé (colonne 3/6/21/22), les notes (colonnes 7 à 20) et la satisfaction (colonne 23)
DF.tmp <- DF.train[,c(3,6,21,22,7:20,23)]
res.pca <- PCA(DF.tmp, quanti.sup=1:4, quali.sup=19, graph=FALSE)

Il est évident de penser que plus les notes attribuées par les voyageurs sont hautes et plus l’individu a de chance d’être satisfait, on peut le voir avec le graphe ci-dessous. Pour ne pas attribuer trop d’importance aux moyennes des notes des individus qui constituent un petit groupe, on associe une largeur par bande proportionnelle à la taille du groupe pour chaque moyenne attribuée.

Ainsi, on va faire notre ACP sur les notes.


Les individus ou variables peuvent être proches dans le plan mais eloignés dans l’espace s’ils sont mal représentés dans le plan.

Ainsi, il est important d’expliquer le modèle avec des variables bien representées dans le plan. Pour cela on veillera à ne pas prendre les variables et individus ayant un cos2 trop bas. Ici on choisit un cos2 égale à 0.68 afin qu’il ne soit pas trop bas et qu’on ait au moins 3 variables à utiliser afin d’expliquer nos individus sur les axes 1 et 2.

Ici l’axe 1 va opposer le confort à bord (droite) et l’inconfort (gauche), tandis que l’axe 2 fera le contraste sur les aspects techniques pour ce qui concerne le vol.

On peut voir que les variables quantitatives supplémentaires ne sont pas du tout interprétables (flèches en bleu) .

plot(res.pca,select="cos2 0.68", choix="varcor")

Lorsque l’angle entre deux axes est proche de 0°, les variables sont fortement corrélés positivement.

Lorsque l’angle est proche de 90°, les variables ne sont pas corrélés, ou très peu.

Lorsque l’angle est proche de 180°, les variables sont fortement corrélés négativement.

  • Ainsi, ci-dessus on voit que la facilité de reservation et le wifi sont fortement correlés.

  • Loisir et Facilité.reservation ne le sont pas, ou très peu.

  • Loisir et Wifi sont un peu corrélés positivement.

Verifions le :

Graphiquement (Facilité.resevation/Wifi) :

On remarque sur le boxplot qu’il semble y avoir une corrélation entre les notes attribuées à Wifi et à la Faclité de réservation, nous allons maintenant le vérifier.

Test du chi-deux (Facilité.resevation/Wifi) :

On rejette \(H_0\) car p-value<0.5 , ainsi on peut affirmer avec un risque de se tromper de 5% que ces deux variables sont corrélés.

chisq.test(DF.tmp$Facilité.resevation, DF.tmp$Wifi, simulate.p.value=TRUE)
## 
##  Pearson's Chi-squared test with simulated p-value (based on 2000
##  replicates)
## 
## data:  DF.tmp$Facilité.resevation and DF.tmp$Wifi
## X-squared = 240142, df = NA, p-value = 0.0004998

Graphiquement on a pu voir qu’un passager donne, en moyenne, des notes égales à Facilité de reservation et Wifi.


Graphiquement (Loisir/Wifi) :

La corrélation entre Wifi et Loisir semble bien moins flagrante que celle vu précédemment, nous allons le verifier.

Test du Chi-deux (Loisir/Wifi) :

On rejette \(H_0\) car p-value<0.5 , ainsi on peut affirmer avec un risque de se tromper égal à 5% que ces deux variables sont corrélés.

chisq.test(DF.tmp$Loisir, DF.tmp$Wifi, simulate.p.value=TRUE)
## 
##  Pearson's Chi-squared test with simulated p-value (based on 2000
##  replicates)
## 
## data:  DF.tmp$Loisir and DF.tmp$Wifi
## X-squared = 16454, df = NA, p-value = 0.0004998

Graphiquement on a pu voir qu’un passager donne, en moyenne, des notes plus élevées au loisir quand il note bien le Wifi.


Graphiquement (Loisir/Facilité.reservation) :

On vérifie une nouvelle fois la corrélation entre les deux variables.

Test du Chi-deux (Loisir/Facilité.resevartion) :

On rejette \(H_0\) car p-value<0.5 , ainsi on peut affirmer avec un risque de se tromper égal à 5% que ces deux variables sont corrélés.

chisq.test(DF.tmp$Loisir, DF.tmp$Facilité.resevation , simulate.p.value=TRUE)
## 
##  Pearson's Chi-squared test with simulated p-value (based on 2000
##  replicates)
## 
## data:  DF.tmp$Loisir and DF.tmp$Facilité.resevation
## X-squared = 568.5, df = NA, p-value = 0.0004998

Le test du chi-deux montre que Loisir et Facilité.reservation sont corrélés, mais on peut voir graphiquement qu’elles ne le sont pas vraiment, on peut faire l’hypothèse que c’est parce qu’un passager qui met de bonnes notes en moyenne aura tendance à mettre de meilleures notes aux autres catégories, on peut faire le même raisonnement pour les mauvaises notes.


Ci-dessous on peut voir une nette séparation entre les individus satisfaits et non satisfaits. Les individus satisfaits sont ceux s’étant amusé. À l’inverse les individus non satisfaits ont octroyé des notes plus basses concernant les loisirs. On ne peut pas vraiment dire pour l’instant si la facilité de réservation et le wifi à bord influent sur la satisfaction du passager.

Ici par exemple l’individu n°70657 est satisfait, or il a mal noté les loisirs, le wifi et la facilité de réservation. Sa satisfaction est probablement influencée par d’autres variables, qui sont qualitatives. On se penchera sur ce sujet lors de l’ACM.

plot(res.pca,habillage=19, select="cos2 0.93", choix="ind",cex = 0.8)

L’individu qui contribue le plus à l’axe 1 y contribue à environ 0.01%.

max(res.pca$ind$contrib[,1])
## [1] 0.009641166

Il n’y a pas d’individus atypiques, ce qui est normal car nos données sont des notes comprises entre 0 et 5 et on a vu qu’elles étaient homogènes.


Observons maintenant quelle part des données expliquent les composantes.

Premièrement, on peut voir que les 3 premiers axes expliquent bien l’inertie sur les données : Les axes étant orthogonaux, ils expliquent 27.14% + 16.87% + 15.47% = 59.48% de l’inertie.

Quant aux axes 1 et 2, ils prennent en compte 27.14% + 16.87% = 44.01% du jeu de données.

On peut aussi voir que l’axe 2 et 3 expliquent à peu près autant l’un que l’autre l’inertie, ainsi on pourra aussi visualiser les données projetées sur le plan formé par l’axe 1 et 3 (voir 2 et 3).

On a un nouveau cercle de corrélation, ici on voit que :

  • Le confort des sièges, la nourriture et la propreté sont fortement corrélés.

  • La gestion des bagages et les services proposés sont fortement corrélés.

  • Dans ce plan les loisirs sont presque totalement expliqués par l’axe 1.

  • L’axe 3 oppose le “confort” aux services qui sont faiblement corrélés dû à l’angle proche de 90 degrés

plot(res.pca, select="cos2 0.60", choix="varcor", axes = c(1,3))

Ci-dessous on voit donc que les passagers sont en général plus satisfait quand ils se sont amusé (loisirs), que le service était agréable (Gestion bagage, Inflight.service, On.board.service) et qu’ils ont passé un vol confortable (Siege.confort, nourriture, propreté), et inversement pour les passagers non satisfaits.

plot(res.pca, habillage=19, select="cos2 0.9", cex=0.8, choix="ind", axes = c(1,3))

Ici on a le cercle de corrélation avec l’axe 2 et 3:

plot(res.pca, select="cos2 0.6", choix="varcor", axes = c(2,3))

Il n’y a pas grand-chose à interpréter, car le barycentre des voyageurs satisfaits et non satisfaits sont tous les 2 proches du centre de gravité de ce plan.

plot(res.pca, invisible="ind", choix="ind", axes=c(2,3))

Transformations & double centrage

Certains passagers ont attribué comme notes 0 pour certaines catégories du vol, on décide de ne pas faire de transformation par l’inverse, car \(\frac{1}{0}\) est un quotient indéterminé, ni de log-transformation car \(\log(0)\) est indéterminé.


On effectue la transformation ”double centrage” sur les données transformées par racine carrée afin de voir si on peut faire gagner en contribution les premières composantes afin d’être plus précis lors de nos analyses.

# On récupère le notes dans le dataframe.
DF.tmp <- sqrt(DF.train[,7:20])
# On centre et on réduit par rapport aux colones.
DF.tmp <- scale(DF.tmp)
# ACP sur les données transformées.
res.pca <- PCA(DF.tmp, graph=FALSE)
barplot(res.pca$eig[,2], col=rainbow(n=14,alpha=0.6,start=0.66,end=1),
        main="Pourcentage d'intertie expliquée par chaque axe\n(Données transformées par racine carrée)",
        ylab="Contribution en %")
lines(seq(0.75,16.3,(16.3-0.75)/13), res.pca$eig[,2], type="b")
text(seq(0.75,16.3,(16.3-0.75)/13), res.pca$eig[,2]-1, paste(round(res.pca$eig[,2],2),"%"), cex=0.7)

Les transformations ne nous ont pas fait gagner plus d’informations au niveau des 3 premiers axes, on s’arrête là pour l’ACP.

Conclusion ACP

Ici, on a pu étudier l’impact des variables quantitatives sur la satisfaction des gens pour un trajet en avion. Il en est ressorti que les services proposés dans l’avion et le confort à bord sont des aspects primordiaux pour la satisfaction des voyageurs, mais que cela n’expliquait pas totalement les données.

ACM

Intéressons-nous maintenant aux données qualitatives.

On effectue une ACM :

res.mca <- MCA(DF.tmp, quali.sup = 5, graph=FALSE)

On peut observer que la première dimension influe à un peu plus de 30%, quant aux dimensions 2, 3, 4, elles influent toutes autour de 20%. Il sera donc sûrement nécessaire de s’intéresser à ces 4 dimensions.

par(mfrow = c(2,2))
for(i in 1:4){
  barplot(res.mca$var$cos2[,i], las = 2, cex.names = 0.64, 
          col=rainbow(n=9,alpha=0.6,start=(i-1)/4,end=i/4),
          main=paste("Cos2 des modalités pour l'axe",i))
}

En se référant aux cos2 (cos2 > 0.7) des barplots précédents :

L’axe 1 oppose les passagers qui voyagent pour le business et les passagers qui voyagent pour un motif personnel. Ceux qui voyagent pour le travail sont en général plus satisfaits et ceux qui voyagent pour un motif personnel sont en général sans avis ou insatisfaits.

L’axe 2 oppose les passagers loyaux aux non-loyaux, il en résulte que les passagers non-loyaux sont plus souvent insatisfaits et que les passagers loyaux.

Les 2 axes prennent aussi en compte à eux deux les voyageurs qui voyagent en business et en éco.

On peut voir que les voyageurs en éco sont moins souvent satisfaits de leur voyage que ceux qui sont en business classe.

plot(res.mca, invisible="ind", axes=c(1,2))

En se référant aux cos2 (cos2 > 0.7) pour l’axe 3 des barplots précédents :

On peut voir que l’axe 3 oppose les personnes de sexe diffèrent, on ne peut pas dire grand-chose quant à l’influence sur la satisfaction du client, on pourrait peut-être dire que les femmes sont un peu moins satisfaites, mais c’est à vérifier.

Vérifions le graphiquement:

Sur le barplot on voit donc que, pour notre jeu de données, les hommes sont un peu plus satisfait en général que les femmes. Mais rien de significativement très différent.

tab = table(DF.train$Genre, DF.train$Satisfaction)
barplot(tab/rowSums(tab), beside=TRUE, col=c("pink","blue"), legend.text=c("Female","Male"))

plot(res.mca, invisible="ind", axes=c(1,3))

Pour prendre en compte les voyageurs en classe éco plus on visualise sur le plan formé par l’axe 3 et 4.

On peut voir ici que les voyageurs en classe éco plus sont moins satisfaits de leur voyages, ils sont très excentrés car ils représentent des données inhabituelles.

plot(res.mca, invisible="ind", axes=c(3,4))

Rappelez-vous de l’individu n°70657, il était satisfait de son vol malgré les mauvaises notes attribuées aux différentes catégories. On voit qu’il possède toutes les modalités influant positivement sur la satisfaction. Ceci montre bien que l’analyse des données qualitatives est importante, car on a eu des informations qu’on ne pouvait pas avoir avec l’ACP.

Conclusion ACM

D’après l’ACM :

  • Si un passager voyage pour des raisons personnelles, il a moins de chance d’être satisfait du vol qu’un passager qui voyage pour le business.

  • Si le passager est un client fidèle (Loyal custommer) il a plus de chance d’être satisfait du vol qu’un passager qui est déloyal (Disloyal custommer).

  • Si un voyageur est en classe business, cela influera positivement sur sa satisfaction, alors que s’il est en classe Eco cela influera négativement. Les passagers Éco plus sont particuliers, mais le fait d’être en classe Éco plus influe négativement sur leur satisfaction.

  • Le sexe de l’individu n’a pas l’air d’influer significativement sur la satisfaction, mais on peut faire l’hypothèse que les femmes sont moins satisfaites que les hommes.

Classification non-superivée

Nous allons maintenant appliquer les méthodes de clustering vues en cours. Le regroupement “d’individus” ne sera pas très intéressant à réaliser, nous allons plutôt définir des profils avec l’ensembles des modalités. Ces profils pourront être regroupés en clusters.

Dans cette partie, on considère l’âge comme une variable qualitative à quatres modalités :

  • 7-19 ans
  • 20-38 ans
  • 39-60 ans
  • 61+ ans

Avant la transformation, on vérifie si l’âge a un impact sur la satisfaction des passagers.

On a un nouveau dataframe pour les catégories d’âge comme variable qualitative, il nous permettra de créer les différents profils :

Nous allons maintenant regrouper les individus par groupes en utilisant les différentes méthodes de clustering. On pourra de cette manière déterminer quels sont les profils les plus proches en terme de notation.

On ne garde que les profils qui comptent plus de 30 personnes afin d’avoir des résultats intéressants a analyser.

On compte maintenant 38 profils dont on donne la liste ci-dessous.

On fait la moyenne des notes de chaque profil :

CAH

On commence par faire un clustering hiérarchique pour déterminer le nombre de groupes (\(K\)) idéal.

\(K=6\) est un bon compromis.

K=6
# On applique la méthode euclidienne pour avoir les meilleures distances en 2D
DF.agg.dist = dist(DF.agg, method="euclidean")
cah.ward = hclust(DF.agg.dist, method="ward.D2")
# On ajuste la taille des caractères pour un meilleur affichage 
par(cex.main=3, cex=0.4)
plot(cah.ward, hang=-1)
rect.hclust(cah.ward,K)

On a donc réussi à créer 6 groupes de profils similaires sur les 38 profils qu’on est en train d’étudier.

Penchons nous sur la composition de ces groupes et analysons les graces aux silhouettes:

Dans le tableau ci-dessus on peut voir que :

  • Le groupe 1 ne rassemble que des individus en business class.

  • Le groupe 2 réunit en grande majorité les individus en business class voyageant pour le business.

  • Le groupe 3 regroupe les clients fidèles.

  • Le groupe 4 est particulier et rassemble seulement deux profils, en particulier, des profils déloyaux qui voyagent en classe éco.

  • Le groupe 5 réunit des passagers majoritairement en dessous de 39 ans voyageant en classe éco ou éco plus.

  • Le groupe 6 regroupe les passagers de 39 ans et plus, voyageant en éco ou éco plus.

On remarque qu’en moyenne les groupes sont assez bien séparés, en effet, les silhouettes moyennes par groupe ne tombent jamais en dessous de 0.38 et la moyenne des silhouettes est de 0.46.

On peut voir que certain profils comme :

  • Loyal Customer/61+/Personal Travel/Business
  • Loyal Customer/7-19/Personal Travel/Eco
  • disloyal Customer/7-19/Business travel/Eco Plus

ont des silhouettes proche de 0, aux alentour de 0.15, ainsi ces profils chevauchent un ou plusieur groupes mais reste bien classés car leur silhouette est positive, on peut se référer au tableau dans la colonne “neighbor” pour voir quel groupe est le plus proche de leur profil.


Il n’est pas nécessaire de décrire toutes les moyennes des notes par cluster.

On va s’intéresser à la fréquence des individus satisfaits par cluster.

On voit que les fréquences diffèrent selon les groupes, ainsi, certains groupes sont en moyenne plus satisfait que d’autres.

Par exemple, le cluster n°3 possède la fréquence de satisfaction la plus élevé avec près de 73%, ainsi un individu ayant un profil associé à ce cluster aura tendance à être satisfait. À l’inverse, un passager dont le profil appartient au cluster n°4, où la fréquence de satisfaction est de 7%, aura tendance à être neutre ou insatisfait.

On a donc réussi à trouver des groupes de profils qui diffèrent par leur notes et ainsi la fréquence de satisfaction des individus qui le constituent.

Le clustering hiérarchique nous permet de déterminer le nombre de groupes qui semble idéal : \(K = 6\). Les notes attribuées selon les différents groupes ne sont pas significativement différentes.

Kmeans

On peut vérifié si le \(K=6\) mis en évidence par le clustering cah était un bon compromis.

En effet, on voit que la diminution de l’inertie intra-classe est moins significative à partir de \(K=6\), on aurait pu prendre \(K\) un peu plus grand, mais pourquoi s’embêter avec un nombre de clusters trop élevé quand l’objectif est de regrouper au maximum sans perdre trop d’inertie.

On réalise ensuite le K-means, avec le meme nombre de groupes qu’avec le CAH.

On voit que l’algorithme du k-means nous donne les mêmes groupes que celui du clustering hiérarchique.

##            groupes.kmeans
## groupes.cah  1  2  3  4  5  6
##           1  4  0  0  0  0  0
##           2  0  0  0  7  0  0
##           3  0  0  0  0  8  0
##           4  0  0  2  0  0  0
##           5  0 10  0  0  0  0
##           6  0  0  0  0  0  7

Vérifions :

On représente les clusters en 2D à l’aide des composantes principales. On remarque que certains clusters se chevauchent, cette représentation montre l’emplacement de chacun des profils et du groupe auquel il appartient.

On remarque qu’un groupe numéro 3 est isolé du reste des observations, c’est celui possédant le plus faible taux de satisfaction (0.07%). Sur le graphe des principales composantes (axes 1 et 2), ce groupe se situe à gauche, or on a vu dans l’ACP que les individus les moins satisfait se situaient bel et bien à gauche de l’axe 1.

Classification supervisé

CART

Nous allons maintenant utiliser les algorithmes de classification supervisée pour tenter de prédire la satisfaction des voyageurs. Penchons nous sur l’arbre de décision suffisamment élagué pour être lisible.

On peut observer que les voyageurs ayant mis une note pour l’enregistrement en ligne inférieure à 4, et une note pour le wifi comprise entre 1 inclus et 4 exclus sont plus fréquemment neutre ou insatisfait, seulement 6% d’entre eux sont satisfaits. De plus, ils représentent 44% du jeu d’entrainement.

Un voyageur ayant noté à 4 ou 5 l’enregistrement en ligne, qui voyage pour des raison personnelles et ayant noté 5 le Wifi, sera satisfait à 100%. Ils représentent 1% du jeu d’entrainement.

res.tree <- rpart(Satisfaction~., data=DF.train)
rpart.plot(res.tree, type=0)

L’arbre de décision prédit correctement la satisfaction des voyageurs avec 88.4% de précision binaire.

pred.class.tree <- predict(res.tree, newdata=DF.test[,-23], type="class")
pred.prop.tree  <- predict(res.tree, newdata=DF.test[,-23], type="prob")

score.tree = sum((pred.class.tree == DF.test[,23])*1)/length(pred.class.tree)
score.tree
## [1] 0.883791

Optimisons le paramètre de complexité (cp) afin d’avoir une élagation optimale pour l’arbre et d’ainsi minimiser le risque de surapprentissage.

On remarque que l’arbre est illisible, on pourra quand même trouver le score de ce modèle optimisé.

res.tree.opt <- rpart(Satisfaction~.,DF.train,control=rpart.control(minsplit = 50 ,cp=0))
cp.opt <- res.tree.opt$cptable[which.min(res.tree.opt$cptable[, "xerror"]), "CP"]
res.tree.opt <- prune(res.tree.opt,cp=cp.opt)
rpart.plot(res.tree.opt, type=0)

L’arbre de décision optimisé a un score de 95.5%.

pred.class.tree.opt <- predict(res.tree.opt, newdata=DF.test[,-23], type="class")
pred.prob.tree.opt <- predict(res.tree.opt, newdata=DF.test[,-23], type="prob")
score.tree.opt = sum((pred.class.tree.opt==DF.test[,23])*1)/length(pred.class.tree.opt)
score.tree.opt
## [1] 0.9545437

LDA / QDA

On utilise les méthodes de classification supervisée pour prédire le comportement de notre data.test.

Avec ces méthodes, on tente de prédire la satisfaction des clients.

On crée nos modèles :

res.lda <- lda(Satisfaction~.,data=DF.train[,c(7:20,23)])
res.qda <- qda(Satisfaction~.,data=DF.train[,c(7:20,23)])

Le score obtenu par la méthode lda est de 81.3%

# --- LDA
pred.class.lda <- predict(res.lda,  newdata = DF.test[,7:20])$class
pred.prob.lda  <- predict(res.lda,  newdata = DF.test[,7:20])$posterior[,2]
score.lda = sum(pred.class.lda==DF.test[,23])/length(pred.class.lda)
score.lda
## [1] 0.8127293

Le score obtenu par la méthode qda est de 81.6%

# --- QDA
pred.class.qda <- predict(res.qda,  newdata = DF.test[,7:20])$class
pred.prob.qda  <- predict(res.qda,  newdata = DF.test[,7:20])$posterior[,2]
score.qda = sum(pred.class.qda==DF.test[,23])/length(pred.class.qda)
score.qda
## [1] 0.8156258

Séléction de modèle

On lance une procédure de sélection de modèle avec une méthode de cross validation 5-fold. Le temps d’exécution de la méthode par défaut (10-fold) était trés long du à la taille du jeu de données. Afin de construire notre modèle nous nous appuyons “seulement” sur les 10 000 premiers individus, et non les 100 000, car sinon la selection de modèle est très longue.

res.stepwise.lda=stepclass(Satisfaction ~., data=DF.train[1:10000,c(7:20,23)] , method="lda", direction="backward", fold=5)
## correctness rate: 0.8143;  starting variables (14): Wifi, Horaire.pratique, Facilité.resevation, Emplacement.porte, Nourriture, Enregistrement.en.ligne, Siege.confort, Loisir, On.board.service, Espace.jambe, Gestion.bagage, Checkin.service, Inflight.service, Propreté 
## correctness rate: 0.8146;  out: "Facilité.resevation";  variables (13): Wifi, Horaire.pratique, Emplacement.porte, Nourriture, Enregistrement.en.ligne, Siege.confort, Loisir, On.board.service, Espace.jambe, Gestion.bagage, Checkin.service, Inflight.service, Propreté 
## 
##  hr.elapsed min.elapsed sec.elapsed 
##       0.000       0.000       8.998
res.stepwise.qda=stepclass(Satisfaction ~., data=DF.train[1:10000,c(7:20,23)] , method="qda", direction="backward", fold=5)
## correctness rate: 0.8252;  starting variables (14): Wifi, Horaire.pratique, Facilité.resevation, Emplacement.porte, Nourriture, Enregistrement.en.ligne, Siege.confort, Loisir, On.board.service, Espace.jambe, Gestion.bagage, Checkin.service, Inflight.service, Propreté 
## correctness rate: 0.8379;  out: "Nourriture";  variables (13): Wifi, Horaire.pratique, Facilité.resevation, Emplacement.porte, Enregistrement.en.ligne, Siege.confort, Loisir, On.board.service, Espace.jambe, Gestion.bagage, Checkin.service, Inflight.service, Propreté 
## correctness rate: 0.8445;  out: "On.board.service";  variables (12): Wifi, Horaire.pratique, Facilité.resevation, Emplacement.porte, Enregistrement.en.ligne, Siege.confort, Loisir, Espace.jambe, Gestion.bagage, Checkin.service, Inflight.service, Propreté 
## correctness rate: 0.848;  out: "Inflight.service";  variables (11): Wifi, Horaire.pratique, Facilité.resevation, Emplacement.porte, Enregistrement.en.ligne, Siege.confort, Loisir, Espace.jambe, Gestion.bagage, Checkin.service, Propreté 
## correctness rate: 0.8508;  out: "Propreté";  variables (10): Wifi, Horaire.pratique, Facilité.resevation, Emplacement.porte, Enregistrement.en.ligne, Siege.confort, Loisir, Espace.jambe, Gestion.bagage, Checkin.service 
## 
##  hr.elapsed min.elapsed sec.elapsed 
##       0.000       0.000      18.006
res.stepwise.lda = lda(res.stepwise.lda$formula , data = DF.train[1:10000,c(7:20,23)] )
res.stepwise.qda = qda(res.stepwise.qda$formula , data = DF.train[1:10000,c(7:20,23)] )

On prédit la satisfaction des passagers

pred.stepwise.lda <- predict(res.stepwise.lda,newdata=DF.test[,c(7:20,23)])$posterior[,2]
pred.stepwise.qda <- predict(res.stepwise.qda,newdata=DF.test[,c(7:20,23)])$posterior[,2]

La séléction de modèle avec lda a un score de 81.3%

pred.prop.stepwise.lda <- predict(res.stepwise.lda,newdata=DF.test[,c(7:20,23)])$posterior[,2]
score.stepwise.lda = sum(round(pred.stepwise.lda)==(DF.test[,c(7:20,23)]$Satisfaction =="satisfied")*1)/dim(DF.test)[1]
score.stepwise.lda
## [1] 0.810721

La séléction de modèle avec qda a un score de 84.5%

pred.prop.stepwise.qda <- predict(res.stepwise.qda,newdata=DF.test[,c(7:20,23)])$posterior[,2]
score.stepwise.qda <- sum(round(pred.prop.stepwise.qda)==(DF.test[,c(7:20,23)]$Satisfaction =="satisfied")*1)/dim(DF.test)[1]
score.stepwise.qda
## [1] 0.8396864

RandomForest

On obtient un score aux alentours de 96% avec le Random Forest

forest=randomForest(factor(DF.train$Satisfaction)~., DF.train, mtry=5, ntree = 15)
pred.class.RF=predict(forest, newdata=DF.test, type="class")
pred.prob.RF = predict(forest, newdata=DF.test, type="prob")
score.RF=sum(pred.class.RF==DF.test[,23])/length(pred.class.RF)
score.RF
## [1] 0.9611478

Comparaison des modèles

Courbes ROC

# ----------------------------------------------------------------------------
ROC.lda           <- roc(DF.test$Satisfaction, pred.prob.lda)
ROC.qda           <- roc(DF.test$Satisfaction, pred.prob.qda)
ROC.stepwise.lda  <- roc(DF.test$Satisfaction, pred.prop.stepwise.lda)
ROC.stepwise.qda  <- roc(DF.test$Satisfaction, pred.prop.stepwise.qda)
ROC.tree          <- roc(DF.test$Satisfaction, pred.prop.tree[,2])
ROC.tree.opt      <- roc(DF.test$Satisfaction, pred.prob.tree.opt[,2])
ROC.RF            <- roc(DF.test$Satisfaction, pred.prob.RF[,2])

On remarque, grâce aux courbes ROC, que les meilleurs modèles sont l’arbre de décision optimisé et la Random Forest. En effet, l’air sous la courbe ROC des ces deux modèles est plus élevé que celles des autres modèles. De plus ces modèles sont très bon car l’air sous leur courbe ROC se rapproche de 1.

Récapitulatif

Python

Réseaux de neuronnes

On passe en langage python pour réaliser la prédiction par réseaux de neuronnes

import pandas as pd
import numpy as np
import keras
DF_train = pd.read_csv("data/train.csv")
DF_test = pd.read_csv("data/test.csv")

DF_train.drop(["Unnamed: 0","id"], axis=1, inplace=True)
DF_test.drop(["Unnamed: 0","id"], axis=1, inplace=True)

DF_train = DF_train.dropna()
DF_test = DF_test.dropna()
DF_train.Gender = (DF_train.Gender == "Male")*1                     # Male = 1 ; Femme = 0
DF_test.Gender = (DF_test.Gender == "Male")*1

DF_train.iloc[:,1] = (DF_train.iloc[:,1] == 'Loyal Customer')*1     # Loyal Customer = 1 ; disloyal Customer = 0
DF_test.iloc[:,1] = (DF_test.iloc[:,1] == 'Loyal Customer')*1

DF_train.iloc[:,3] = (DF_train.iloc[:,3] == 'Business travel')*1    # Business travel = 1 ; Personal Travel = 0
DF_test.iloc[:,3] = (DF_test.iloc[:,3] == 'Business travel')*1

DF_train.iloc[DF_train.iloc[:,4] == 'Business',4] = 2               # Business = 2
DF_train.iloc[DF_train.iloc[:,4] == 'Eco Plus',4] = 1               # Eco PLus = 1
DF_train.iloc[DF_train.iloc[:,4] == 'Eco',4] = 0                    # Eco = 0
DF_test.iloc[DF_test.iloc[:,4] == 'Business',4] = 2
DF_test.iloc[DF_test.iloc[:,4] == 'Eco Plus',4] = 1
DF_test.iloc[DF_test.iloc[:,4] == 'Eco',4] = 0

DF_train.iloc[:,-1] = (DF_train.iloc[:,-1] == 'satisfied')*1        # satisfied = 1 ; neutral or disatisfied = 0
DF_test.iloc[:,-1] = (DF_test.iloc[:,-1] == 'satisfied')*1
sample_train = DF_train.to_numpy()
sample_test = DF_test.to_numpy()

X_train = []
Y_train = []
X_test = []
Y_test = []
for i in range(len(sample_train)):
    X_train.append(sample_train[i][:-1])
    Y_train.append(sample_train[i][-1])
X_train = np.array(X_train)
Y_train = np.array(Y_train)

for i in range(len(sample_test)):
    X_test.append(sample_test[i][:-1])
    Y_test.append(sample_test[i][-1])
X_test = np.asarray(X_test).astype(np.float32)
Y_test = np.asarray(Y_test).astype(np.float32)
model = keras.Sequential()


model.add(keras.layers.Dense(128,activation="tanh"))
model.add(keras.layers.Dense(16,activation="softmax"))
model.add(keras.layers.Dense(1,activation="sigmoid"))

model.compile(optimizer="Adam",
                loss="binary_crossentropy",
                metrics=['accuracy'])

X_train = np.asarray(X_train).astype(np.float32)
Y_train = np.asarray(Y_train).astype(np.float32)
model.fit(X_train, Y_train, epochs=100, batch_size=1024)
## Epoch 1/100
## 
  1/102 [..............................] - ETA: 44:27 - loss: 0.7032 - accuracy: 0.4521
 18/102 [====>.........................] - ETA: 0s - loss: 0.6945 - accuracy: 0.4920   
 38/102 [==========>...................] - ETA: 0s - loss: 0.6897 - accuracy: 0.5191
 56/102 [===============>..............] - ETA: 0s - loss: 0.6872 - accuracy: 0.5298
 75/102 [=====================>........] - ETA: 0s - loss: 0.6848 - accuracy: 0.5371
 96/102 [===========================>..] - ETA: 0s - loss: 0.6824 - accuracy: 0.5456
102/102 [==============================] - 27s 3ms/step - loss: 0.6816 - accuracy: 0.5485
## Epoch 2/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.6554 - accuracy: 0.6387
 22/102 [=====>........................] - ETA: 0s - loss: 0.6445 - accuracy: 0.6650
 40/102 [==========>...................] - ETA: 0s - loss: 0.6402 - accuracy: 0.6758
 58/102 [================>.............] - ETA: 0s - loss: 0.6367 - accuracy: 0.6850
 77/102 [=====================>........] - ETA: 0s - loss: 0.6332 - accuracy: 0.6931
 96/102 [===========================>..] - ETA: 0s - loss: 0.6295 - accuracy: 0.7006
102/102 [==============================] - 0s 3ms/step - loss: 0.6281 - accuracy: 0.7032
## Epoch 3/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.5664 - accuracy: 0.8037
 18/102 [====>.........................] - ETA: 0s - loss: 0.5647 - accuracy: 0.8048
 35/102 [=========>....................] - ETA: 0s - loss: 0.5628 - accuracy: 0.8030
 49/102 [=============>................] - ETA: 0s - loss: 0.5606 - accuracy: 0.8039
 60/102 [================>.............] - ETA: 0s - loss: 0.5588 - accuracy: 0.8049
 72/102 [====================>.........] - ETA: 0s - loss: 0.5569 - accuracy: 0.8059
 85/102 [========================>.....] - ETA: 0s - loss: 0.5553 - accuracy: 0.8064
 98/102 [===========================>..] - ETA: 0s - loss: 0.5540 - accuracy: 0.8067
102/102 [==============================] - 0s 4ms/step - loss: 0.5535 - accuracy: 0.8069
## Epoch 4/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.5207 - accuracy: 0.8066
 13/102 [==>...........................] - ETA: 0s - loss: 0.5195 - accuracy: 0.8171
 26/102 [======>.......................] - ETA: 0s - loss: 0.5193 - accuracy: 0.8177
 43/102 [===========>..................] - ETA: 0s - loss: 0.5186 - accuracy: 0.8188
 63/102 [=================>............] - ETA: 0s - loss: 0.5171 - accuracy: 0.8201
 80/102 [======================>.......] - ETA: 0s - loss: 0.5156 - accuracy: 0.8210
 98/102 [===========================>..] - ETA: 0s - loss: 0.5140 - accuracy: 0.8219
102/102 [==============================] - 0s 3ms/step - loss: 0.5136 - accuracy: 0.8221
## Epoch 5/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.5098 - accuracy: 0.8047
 20/102 [====>.........................] - ETA: 0s - loss: 0.4959 - accuracy: 0.8240
 39/102 [==========>...................] - ETA: 0s - loss: 0.4921 - accuracy: 0.8277
 55/102 [===============>..............] - ETA: 0s - loss: 0.4897 - accuracy: 0.8297
 67/102 [==================>...........] - ETA: 0s - loss: 0.4884 - accuracy: 0.8306
 78/102 [=====================>........] - ETA: 0s - loss: 0.4873 - accuracy: 0.8314
 90/102 [=========================>....] - ETA: 0s - loss: 0.4862 - accuracy: 0.8321
102/102 [==============================] - 0s 4ms/step - loss: 0.4853 - accuracy: 0.8326
## Epoch 6/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.4803 - accuracy: 0.8281
 14/102 [===>..........................] - ETA: 0s - loss: 0.4669 - accuracy: 0.8365
 29/102 [=======>......................] - ETA: 0s - loss: 0.4668 - accuracy: 0.8364
 47/102 [============>.................] - ETA: 0s - loss: 0.4676 - accuracy: 0.8358
 65/102 [==================>...........] - ETA: 0s - loss: 0.4677 - accuracy: 0.8355
 84/102 [=======================>......] - ETA: 0s - loss: 0.4673 - accuracy: 0.8356
102/102 [==============================] - ETA: 0s - loss: 0.4665 - accuracy: 0.8360
102/102 [==============================] - 0s 3ms/step - loss: 0.4665 - accuracy: 0.8361
## Epoch 7/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.4475 - accuracy: 0.8555
 19/102 [====>.........................] - ETA: 0s - loss: 0.4556 - accuracy: 0.8396
 31/102 [========>.....................] - ETA: 0s - loss: 0.4569 - accuracy: 0.8373
 43/102 [===========>..................] - ETA: 0s - loss: 0.4570 - accuracy: 0.8368
 52/102 [==============>...............] - ETA: 0s - loss: 0.4567 - accuracy: 0.8368
 63/102 [=================>............] - ETA: 0s - loss: 0.4560 - accuracy: 0.8372
 76/102 [=====================>........] - ETA: 0s - loss: 0.4549 - accuracy: 0.8377
 87/102 [========================>.....] - ETA: 0s - loss: 0.4540 - accuracy: 0.8382
102/102 [==============================] - 0s 4ms/step - loss: 0.4528 - accuracy: 0.8389
## Epoch 8/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.4390 - accuracy: 0.8486
 20/102 [====>.........................] - ETA: 0s - loss: 0.4386 - accuracy: 0.8449
 39/102 [==========>...................] - ETA: 0s - loss: 0.4368 - accuracy: 0.8459
 59/102 [================>.............] - ETA: 0s - loss: 0.4356 - accuracy: 0.8465
 78/102 [=====================>........] - ETA: 0s - loss: 0.4347 - accuracy: 0.8468
 93/102 [==========================>...] - ETA: 0s - loss: 0.4339 - accuracy: 0.8472
102/102 [==============================] - 0s 3ms/step - loss: 0.4335 - accuracy: 0.8474
## Epoch 9/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.4148 - accuracy: 0.8555
 14/102 [===>..........................] - ETA: 0s - loss: 0.4176 - accuracy: 0.8531
 27/102 [======>.......................] - ETA: 0s - loss: 0.4193 - accuracy: 0.8525
 38/102 [==========>...................] - ETA: 0s - loss: 0.4193 - accuracy: 0.8524
 52/102 [==============>...............] - ETA: 0s - loss: 0.4194 - accuracy: 0.8523
 65/102 [==================>...........] - ETA: 0s - loss: 0.4193 - accuracy: 0.8522
 81/102 [======================>.......] - ETA: 0s - loss: 0.4192 - accuracy: 0.8522
 99/102 [============================>.] - ETA: 0s - loss: 0.4191 - accuracy: 0.8520
102/102 [==============================] - 0s 4ms/step - loss: 0.4191 - accuracy: 0.8519
## Epoch 10/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.4330 - accuracy: 0.8389
 21/102 [=====>........................] - ETA: 0s - loss: 0.4500 - accuracy: 0.8278
 39/102 [==========>...................] - ETA: 0s - loss: 0.4473 - accuracy: 0.8307
 57/102 [===============>..............] - ETA: 0s - loss: 0.4448 - accuracy: 0.8323
 73/102 [====================>.........] - ETA: 0s - loss: 0.4426 - accuracy: 0.8336
 86/102 [========================>.....] - ETA: 0s - loss: 0.4407 - accuracy: 0.8347
100/102 [============================>.] - ETA: 0s - loss: 0.4389 - accuracy: 0.8357
102/102 [==============================] - 0s 3ms/step - loss: 0.4386 - accuracy: 0.8359
## Epoch 11/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3911 - accuracy: 0.8711
 15/102 [===>..........................] - ETA: 0s - loss: 0.4025 - accuracy: 0.8604
 28/102 [=======>......................] - ETA: 0s - loss: 0.4039 - accuracy: 0.8586
 42/102 [===========>..................] - ETA: 0s - loss: 0.4040 - accuracy: 0.8579
 57/102 [===============>..............] - ETA: 0s - loss: 0.4043 - accuracy: 0.8572
 77/102 [=====================>........] - ETA: 0s - loss: 0.4039 - accuracy: 0.8569
 96/102 [===========================>..] - ETA: 0s - loss: 0.4035 - accuracy: 0.8569
102/102 [==============================] - 0s 3ms/step - loss: 0.4034 - accuracy: 0.8569
## Epoch 12/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.4213 - accuracy: 0.8428
 19/102 [====>.........................] - ETA: 0s - loss: 0.4123 - accuracy: 0.8450
 38/102 [==========>...................] - ETA: 0s - loss: 0.4108 - accuracy: 0.8465
 58/102 [================>.............] - ETA: 0s - loss: 0.4087 - accuracy: 0.8481
 76/102 [=====================>........] - ETA: 0s - loss: 0.4071 - accuracy: 0.8492
 93/102 [==========================>...] - ETA: 0s - loss: 0.4065 - accuracy: 0.8496
102/102 [==============================] - 0s 3ms/step - loss: 0.4064 - accuracy: 0.8496
## Epoch 13/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.4192 - accuracy: 0.8408
 19/102 [====>.........................] - ETA: 0s - loss: 0.4146 - accuracy: 0.8438
 38/102 [==========>...................] - ETA: 0s - loss: 0.4264 - accuracy: 0.8324
 56/102 [===============>..............] - ETA: 0s - loss: 0.4267 - accuracy: 0.8316
 74/102 [====================>.........] - ETA: 0s - loss: 0.4247 - accuracy: 0.8328
 93/102 [==========================>...] - ETA: 0s - loss: 0.4221 - accuracy: 0.8347
102/102 [==============================] - 0s 3ms/step - loss: 0.4208 - accuracy: 0.8357
## Epoch 14/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3773 - accuracy: 0.8623
 20/102 [====>.........................] - ETA: 0s - loss: 0.3872 - accuracy: 0.8576
 40/102 [==========>...................] - ETA: 0s - loss: 0.3878 - accuracy: 0.8572
 57/102 [===============>..............] - ETA: 0s - loss: 0.3877 - accuracy: 0.8573
 75/102 [=====================>........] - ETA: 0s - loss: 0.3872 - accuracy: 0.8576
 94/102 [==========================>...] - ETA: 0s - loss: 0.3865 - accuracy: 0.8580
102/102 [==============================] - 0s 3ms/step - loss: 0.3862 - accuracy: 0.8582
## Epoch 15/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3835 - accuracy: 0.8604
 21/102 [=====>........................] - ETA: 0s - loss: 0.3810 - accuracy: 0.8609
 40/102 [==========>...................] - ETA: 0s - loss: 0.3781 - accuracy: 0.8625
 59/102 [================>.............] - ETA: 0s - loss: 0.3763 - accuracy: 0.8637
 79/102 [======================>.......] - ETA: 0s - loss: 0.3751 - accuracy: 0.8644
 99/102 [============================>.] - ETA: 0s - loss: 0.3743 - accuracy: 0.8649
102/102 [==============================] - 0s 3ms/step - loss: 0.3741 - accuracy: 0.8650
## Epoch 16/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3627 - accuracy: 0.8701
 20/102 [====>.........................] - ETA: 0s - loss: 0.3627 - accuracy: 0.8712
 38/102 [==========>...................] - ETA: 0s - loss: 0.3654 - accuracy: 0.8692
 58/102 [================>.............] - ETA: 0s - loss: 0.3670 - accuracy: 0.8680
 77/102 [=====================>........] - ETA: 0s - loss: 0.3677 - accuracy: 0.8673
 95/102 [==========================>...] - ETA: 0s - loss: 0.3678 - accuracy: 0.8670
102/102 [==============================] - 0s 3ms/step - loss: 0.3679 - accuracy: 0.8668
## Epoch 17/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3819 - accuracy: 0.8564
 19/102 [====>.........................] - ETA: 0s - loss: 0.3675 - accuracy: 0.8672
 39/102 [==========>...................] - ETA: 0s - loss: 0.3647 - accuracy: 0.8683
 58/102 [================>.............] - ETA: 0s - loss: 0.3636 - accuracy: 0.8684
 76/102 [=====================>........] - ETA: 0s - loss: 0.3628 - accuracy: 0.8685
 96/102 [===========================>..] - ETA: 0s - loss: 0.3622 - accuracy: 0.8687
102/102 [==============================] - 0s 3ms/step - loss: 0.3621 - accuracy: 0.8687
## Epoch 18/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3483 - accuracy: 0.8770
 21/102 [=====>........................] - ETA: 0s - loss: 0.3528 - accuracy: 0.8756
 39/102 [==========>...................] - ETA: 0s - loss: 0.3539 - accuracy: 0.8743
 54/102 [==============>...............] - ETA: 0s - loss: 0.3551 - accuracy: 0.8731
 72/102 [====================>.........] - ETA: 0s - loss: 0.3560 - accuracy: 0.8723
 90/102 [=========================>....] - ETA: 0s - loss: 0.3568 - accuracy: 0.8716
102/102 [==============================] - 0s 3ms/step - loss: 0.3571 - accuracy: 0.8713
## Epoch 19/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3747 - accuracy: 0.8447
 19/102 [====>.........................] - ETA: 0s - loss: 0.3707 - accuracy: 0.8574
 37/102 [=========>....................] - ETA: 0s - loss: 0.3721 - accuracy: 0.8579
 55/102 [===============>..............] - ETA: 0s - loss: 0.3731 - accuracy: 0.8578
 75/102 [=====================>........] - ETA: 0s - loss: 0.3735 - accuracy: 0.8578
 93/102 [==========================>...] - ETA: 0s - loss: 0.3730 - accuracy: 0.8583
102/102 [==============================] - 0s 3ms/step - loss: 0.3727 - accuracy: 0.8586
## Epoch 20/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3778 - accuracy: 0.8486
 21/102 [=====>........................] - ETA: 0s - loss: 0.3628 - accuracy: 0.8641
 39/102 [==========>...................] - ETA: 0s - loss: 0.3598 - accuracy: 0.8662
 57/102 [===============>..............] - ETA: 0s - loss: 0.3582 - accuracy: 0.8672
 77/102 [=====================>........] - ETA: 0s - loss: 0.3568 - accuracy: 0.8679
 95/102 [==========================>...] - ETA: 0s - loss: 0.3559 - accuracy: 0.8684
102/102 [==============================] - 0s 3ms/step - loss: 0.3555 - accuracy: 0.8685
## Epoch 21/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3747 - accuracy: 0.8545
 19/102 [====>.........................] - ETA: 0s - loss: 0.3617 - accuracy: 0.8619
 37/102 [=========>....................] - ETA: 0s - loss: 0.3563 - accuracy: 0.8656
 56/102 [===============>..............] - ETA: 0s - loss: 0.3541 - accuracy: 0.8672
 73/102 [====================>.........] - ETA: 0s - loss: 0.3528 - accuracy: 0.8681
 91/102 [=========================>....] - ETA: 0s - loss: 0.3530 - accuracy: 0.8680
102/102 [==============================] - 0s 3ms/step - loss: 0.3534 - accuracy: 0.8677
## Epoch 22/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3605 - accuracy: 0.8574
 18/102 [====>.........................] - ETA: 0s - loss: 0.3579 - accuracy: 0.8646
 38/102 [==========>...................] - ETA: 0s - loss: 0.3545 - accuracy: 0.8667
 56/102 [===============>..............] - ETA: 0s - loss: 0.3529 - accuracy: 0.8676
 74/102 [====================>.........] - ETA: 0s - loss: 0.3516 - accuracy: 0.8684
 94/102 [==========================>...] - ETA: 0s - loss: 0.3504 - accuracy: 0.8692
102/102 [==============================] - 0s 3ms/step - loss: 0.3499 - accuracy: 0.8695
## Epoch 23/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3300 - accuracy: 0.8721
 21/102 [=====>........................] - ETA: 0s - loss: 0.3358 - accuracy: 0.8771
 40/102 [==========>...................] - ETA: 0s - loss: 0.3390 - accuracy: 0.8752
 58/102 [================>.............] - ETA: 0s - loss: 0.3405 - accuracy: 0.8744
 77/102 [=====================>........] - ETA: 0s - loss: 0.3407 - accuracy: 0.8742
 96/102 [===========================>..] - ETA: 0s - loss: 0.3406 - accuracy: 0.8743
102/102 [==============================] - 0s 3ms/step - loss: 0.3405 - accuracy: 0.8744
## Epoch 24/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3273 - accuracy: 0.8779
 20/102 [====>.........................] - ETA: 0s - loss: 0.3339 - accuracy: 0.8772
 39/102 [==========>...................] - ETA: 0s - loss: 0.3359 - accuracy: 0.8761
 59/102 [================>.............] - ETA: 0s - loss: 0.3361 - accuracy: 0.8760
 79/102 [======================>.......] - ETA: 0s - loss: 0.3354 - accuracy: 0.8765
 98/102 [===========================>..] - ETA: 0s - loss: 0.3346 - accuracy: 0.8769
102/102 [==============================] - 0s 3ms/step - loss: 0.3344 - accuracy: 0.8769
## Epoch 25/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3896 - accuracy: 0.8389
 19/102 [====>.........................] - ETA: 0s - loss: 0.3746 - accuracy: 0.8510
 39/102 [==========>...................] - ETA: 0s - loss: 0.3772 - accuracy: 0.8501
 58/102 [================>.............] - ETA: 0s - loss: 0.3795 - accuracy: 0.8489
 76/102 [=====================>........] - ETA: 0s - loss: 0.3787 - accuracy: 0.8495
 96/102 [===========================>..] - ETA: 0s - loss: 0.3768 - accuracy: 0.8508
102/102 [==============================] - 0s 3ms/step - loss: 0.3761 - accuracy: 0.8513
## Epoch 26/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3133 - accuracy: 0.8896
 20/102 [====>.........................] - ETA: 0s - loss: 0.3358 - accuracy: 0.8733
 39/102 [==========>...................] - ETA: 0s - loss: 0.3379 - accuracy: 0.8729
 58/102 [================>.............] - ETA: 0s - loss: 0.3383 - accuracy: 0.8729
 78/102 [=====================>........] - ETA: 0s - loss: 0.3374 - accuracy: 0.8736
 97/102 [===========================>..] - ETA: 0s - loss: 0.3364 - accuracy: 0.8743
102/102 [==============================] - 0s 3ms/step - loss: 0.3361 - accuracy: 0.8745
## Epoch 27/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3139 - accuracy: 0.8887
 20/102 [====>.........................] - ETA: 0s - loss: 0.3243 - accuracy: 0.8816
 38/102 [==========>...................] - ETA: 0s - loss: 0.3259 - accuracy: 0.8802
 58/102 [================>.............] - ETA: 0s - loss: 0.3271 - accuracy: 0.8793
 77/102 [=====================>........] - ETA: 0s - loss: 0.3286 - accuracy: 0.8784
 96/102 [===========================>..] - ETA: 0s - loss: 0.3292 - accuracy: 0.8779
102/102 [==============================] - 0s 3ms/step - loss: 0.3293 - accuracy: 0.8779
## Epoch 28/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3024 - accuracy: 0.8887
 19/102 [====>.........................] - ETA: 0s - loss: 0.3139 - accuracy: 0.8856
 39/102 [==========>...................] - ETA: 0s - loss: 0.3150 - accuracy: 0.8853
 58/102 [================>.............] - ETA: 0s - loss: 0.3190 - accuracy: 0.8829
 77/102 [=====================>........] - ETA: 0s - loss: 0.3254 - accuracy: 0.8791
 97/102 [===========================>..] - ETA: 0s - loss: 0.3302 - accuracy: 0.8764
102/102 [==============================] - 0s 3ms/step - loss: 0.3312 - accuracy: 0.8758
## Epoch 29/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3351 - accuracy: 0.8721
 21/102 [=====>........................] - ETA: 0s - loss: 0.3375 - accuracy: 0.8723
 40/102 [==========>...................] - ETA: 0s - loss: 0.3350 - accuracy: 0.8735
 58/102 [================>.............] - ETA: 0s - loss: 0.3349 - accuracy: 0.8736
 78/102 [=====================>........] - ETA: 0s - loss: 0.3357 - accuracy: 0.8731
 98/102 [===========================>..] - ETA: 0s - loss: 0.3353 - accuracy: 0.8732
102/102 [==============================] - 0s 3ms/step - loss: 0.3352 - accuracy: 0.8733
## Epoch 30/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3404 - accuracy: 0.8779
 19/102 [====>.........................] - ETA: 0s - loss: 0.3211 - accuracy: 0.8808
 37/102 [=========>....................] - ETA: 0s - loss: 0.3344 - accuracy: 0.8727
 57/102 [===============>..............] - ETA: 0s - loss: 0.3497 - accuracy: 0.8631
 76/102 [=====================>........] - ETA: 0s - loss: 0.3588 - accuracy: 0.8577
 95/102 [==========================>...] - ETA: 0s - loss: 0.3625 - accuracy: 0.8555
102/102 [==============================] - 0s 3ms/step - loss: 0.3631 - accuracy: 0.8551
## Epoch 31/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3146 - accuracy: 0.8750
 19/102 [====>.........................] - ETA: 0s - loss: 0.3339 - accuracy: 0.8743
 39/102 [==========>...................] - ETA: 0s - loss: 0.3300 - accuracy: 0.8767
 59/102 [================>.............] - ETA: 0s - loss: 0.3271 - accuracy: 0.8781
 77/102 [=====================>........] - ETA: 0s - loss: 0.3252 - accuracy: 0.8790
 96/102 [===========================>..] - ETA: 0s - loss: 0.3237 - accuracy: 0.8798
102/102 [==============================] - 0s 3ms/step - loss: 0.3232 - accuracy: 0.8800
## Epoch 32/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3758 - accuracy: 0.8350
 20/102 [====>.........................] - ETA: 0s - loss: 0.3357 - accuracy: 0.8683
 40/102 [==========>...................] - ETA: 0s - loss: 0.3274 - accuracy: 0.8746
 59/102 [================>.............] - ETA: 0s - loss: 0.3244 - accuracy: 0.8768
 77/102 [=====================>........] - ETA: 0s - loss: 0.3225 - accuracy: 0.8782
 97/102 [===========================>..] - ETA: 0s - loss: 0.3212 - accuracy: 0.8791
102/102 [==============================] - 0s 3ms/step - loss: 0.3208 - accuracy: 0.8793
## Epoch 33/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3140 - accuracy: 0.8857
 20/102 [====>.........................] - ETA: 0s - loss: 0.3041 - accuracy: 0.8893
 38/102 [==========>...................] - ETA: 0s - loss: 0.3028 - accuracy: 0.8902
 56/102 [===============>..............] - ETA: 0s - loss: 0.3027 - accuracy: 0.8900
 77/102 [=====================>........] - ETA: 0s - loss: 0.3030 - accuracy: 0.8896
 95/102 [==========================>...] - ETA: 0s - loss: 0.3032 - accuracy: 0.8893
102/102 [==============================] - 0s 3ms/step - loss: 0.3034 - accuracy: 0.8891
## Epoch 34/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3266 - accuracy: 0.8711
 19/102 [====>.........................] - ETA: 0s - loss: 0.3415 - accuracy: 0.8656
 37/102 [=========>....................] - ETA: 0s - loss: 0.3405 - accuracy: 0.8672
 56/102 [===============>..............] - ETA: 0s - loss: 0.3383 - accuracy: 0.8689
 74/102 [====================>.........] - ETA: 0s - loss: 0.3358 - accuracy: 0.8704
 93/102 [==========================>...] - ETA: 0s - loss: 0.3331 - accuracy: 0.8719
102/102 [==============================] - 0s 3ms/step - loss: 0.3317 - accuracy: 0.8726
## Epoch 35/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2904 - accuracy: 0.8955
 19/102 [====>.........................] - ETA: 0s - loss: 0.3010 - accuracy: 0.8883
 40/102 [==========>...................] - ETA: 0s - loss: 0.3023 - accuracy: 0.8877
 58/102 [================>.............] - ETA: 0s - loss: 0.3030 - accuracy: 0.8873
 76/102 [=====================>........] - ETA: 0s - loss: 0.3029 - accuracy: 0.8874
 96/102 [===========================>..] - ETA: 0s - loss: 0.3029 - accuracy: 0.8873
102/102 [==============================] - 0s 3ms/step - loss: 0.3031 - accuracy: 0.8872
## Epoch 36/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3180 - accuracy: 0.8857
 21/102 [=====>........................] - ETA: 0s - loss: 0.3194 - accuracy: 0.8782
 40/102 [==========>...................] - ETA: 0s - loss: 0.3131 - accuracy: 0.8814
 58/102 [================>.............] - ETA: 0s - loss: 0.3096 - accuracy: 0.8835
 78/102 [=====================>........] - ETA: 0s - loss: 0.3079 - accuracy: 0.8844
 97/102 [===========================>..] - ETA: 0s - loss: 0.3069 - accuracy: 0.8850
102/102 [==============================] - 0s 3ms/step - loss: 0.3067 - accuracy: 0.8851
## Epoch 37/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3350 - accuracy: 0.8662
 19/102 [====>.........................] - ETA: 0s - loss: 0.3062 - accuracy: 0.8846
 37/102 [=========>....................] - ETA: 0s - loss: 0.3015 - accuracy: 0.8870
 57/102 [===============>..............] - ETA: 0s - loss: 0.3000 - accuracy: 0.8879
 75/102 [=====================>........] - ETA: 0s - loss: 0.2990 - accuracy: 0.8886
 93/102 [==========================>...] - ETA: 0s - loss: 0.2980 - accuracy: 0.8892
102/102 [==============================] - 0s 3ms/step - loss: 0.2975 - accuracy: 0.8894
## Epoch 38/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2721 - accuracy: 0.9072
 19/102 [====>.........................] - ETA: 0s - loss: 0.2925 - accuracy: 0.8920
 40/102 [==========>...................] - ETA: 0s - loss: 0.2894 - accuracy: 0.8933
 58/102 [================>.............] - ETA: 0s - loss: 0.2911 - accuracy: 0.8923
 77/102 [=====================>........] - ETA: 0s - loss: 0.2954 - accuracy: 0.8899
 96/102 [===========================>..] - ETA: 0s - loss: 0.2982 - accuracy: 0.8884
102/102 [==============================] - 0s 3ms/step - loss: 0.2988 - accuracy: 0.8881
## Epoch 39/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2813 - accuracy: 0.8936
 21/102 [=====>........................] - ETA: 0s - loss: 0.2831 - accuracy: 0.8957
 41/102 [===========>..................] - ETA: 0s - loss: 0.2843 - accuracy: 0.8951
 59/102 [================>.............] - ETA: 0s - loss: 0.2852 - accuracy: 0.8946
 78/102 [=====================>........] - ETA: 0s - loss: 0.2860 - accuracy: 0.8942
 99/102 [============================>.] - ETA: 0s - loss: 0.2864 - accuracy: 0.8940
102/102 [==============================] - 0s 3ms/step - loss: 0.2864 - accuracy: 0.8940
## Epoch 40/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2997 - accuracy: 0.8965
 20/102 [====>.........................] - ETA: 0s - loss: 0.2942 - accuracy: 0.8921
 39/102 [==========>...................] - ETA: 0s - loss: 0.2961 - accuracy: 0.8904
 59/102 [================>.............] - ETA: 0s - loss: 0.2951 - accuracy: 0.8906
 78/102 [=====================>........] - ETA: 0s - loss: 0.2938 - accuracy: 0.8911
 96/102 [===========================>..] - ETA: 0s - loss: 0.2925 - accuracy: 0.8916
102/102 [==============================] - 0s 3ms/step - loss: 0.2920 - accuracy: 0.8918
## Epoch 41/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3374 - accuracy: 0.8721
 20/102 [====>.........................] - ETA: 0s - loss: 0.2999 - accuracy: 0.8864
 39/102 [==========>...................] - ETA: 0s - loss: 0.2966 - accuracy: 0.8881
 58/102 [================>.............] - ETA: 0s - loss: 0.2968 - accuracy: 0.8880
 76/102 [=====================>........] - ETA: 0s - loss: 0.2966 - accuracy: 0.8881
 95/102 [==========================>...] - ETA: 0s - loss: 0.2960 - accuracy: 0.8884
102/102 [==============================] - 0s 3ms/step - loss: 0.2956 - accuracy: 0.8886
## Epoch 42/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2940 - accuracy: 0.8936
 20/102 [====>.........................] - ETA: 0s - loss: 0.2770 - accuracy: 0.8981
 40/102 [==========>...................] - ETA: 0s - loss: 0.2762 - accuracy: 0.8988
 58/102 [================>.............] - ETA: 0s - loss: 0.2767 - accuracy: 0.8985
 77/102 [=====================>........] - ETA: 0s - loss: 0.2782 - accuracy: 0.8977
 97/102 [===========================>..] - ETA: 0s - loss: 0.2811 - accuracy: 0.8962
102/102 [==============================] - 0s 3ms/step - loss: 0.2822 - accuracy: 0.8956
## Epoch 43/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2992 - accuracy: 0.8896
 20/102 [====>.........................] - ETA: 0s - loss: 0.3102 - accuracy: 0.8792
 39/102 [==========>...................] - ETA: 0s - loss: 0.3047 - accuracy: 0.8821
 58/102 [================>.............] - ETA: 0s - loss: 0.3021 - accuracy: 0.8836
 78/102 [=====================>........] - ETA: 0s - loss: 0.2998 - accuracy: 0.8851
 96/102 [===========================>..] - ETA: 0s - loss: 0.2978 - accuracy: 0.8863
102/102 [==============================] - 0s 3ms/step - loss: 0.2972 - accuracy: 0.8867
## Epoch 44/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2683 - accuracy: 0.9014
 20/102 [====>.........................] - ETA: 0s - loss: 0.2960 - accuracy: 0.8874
 39/102 [==========>...................] - ETA: 0s - loss: 0.2890 - accuracy: 0.8912
 59/102 [================>.............] - ETA: 0s - loss: 0.2855 - accuracy: 0.8928
 78/102 [=====================>........] - ETA: 0s - loss: 0.2834 - accuracy: 0.8938
 97/102 [===========================>..] - ETA: 0s - loss: 0.2819 - accuracy: 0.8946
102/102 [==============================] - 0s 3ms/step - loss: 0.2815 - accuracy: 0.8947
## Epoch 45/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2351 - accuracy: 0.9189
 20/102 [====>.........................] - ETA: 0s - loss: 0.2627 - accuracy: 0.9039
 40/102 [==========>...................] - ETA: 0s - loss: 0.2682 - accuracy: 0.9017
 59/102 [================>.............] - ETA: 0s - loss: 0.2743 - accuracy: 0.8984
 78/102 [=====================>........] - ETA: 0s - loss: 0.2779 - accuracy: 0.8964
 98/102 [===========================>..] - ETA: 0s - loss: 0.2796 - accuracy: 0.8955
102/102 [==============================] - 0s 3ms/step - loss: 0.2799 - accuracy: 0.8953
## Epoch 46/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2931 - accuracy: 0.8926
 20/102 [====>.........................] - ETA: 0s - loss: 0.2864 - accuracy: 0.8928
 38/102 [==========>...................] - ETA: 0s - loss: 0.2890 - accuracy: 0.8904
 58/102 [================>.............] - ETA: 0s - loss: 0.2890 - accuracy: 0.8903
 78/102 [=====================>........] - ETA: 0s - loss: 0.2877 - accuracy: 0.8909
 97/102 [===========================>..] - ETA: 0s - loss: 0.2863 - accuracy: 0.8917
102/102 [==============================] - 0s 3ms/step - loss: 0.2859 - accuracy: 0.8919
## Epoch 47/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3213 - accuracy: 0.8721
 19/102 [====>.........................] - ETA: 0s - loss: 0.3031 - accuracy: 0.8833
 38/102 [==========>...................] - ETA: 0s - loss: 0.2937 - accuracy: 0.8885
 57/102 [===============>..............] - ETA: 0s - loss: 0.2882 - accuracy: 0.8914
 76/102 [=====================>........] - ETA: 0s - loss: 0.2841 - accuracy: 0.8934
 95/102 [==========================>...] - ETA: 0s - loss: 0.2817 - accuracy: 0.8946
102/102 [==============================] - 0s 3ms/step - loss: 0.2809 - accuracy: 0.8950
## Epoch 48/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2705 - accuracy: 0.8965
 20/102 [====>.........................] - ETA: 0s - loss: 0.2728 - accuracy: 0.8987
 39/102 [==========>...................] - ETA: 0s - loss: 0.2711 - accuracy: 0.8992
 57/102 [===============>..............] - ETA: 0s - loss: 0.2708 - accuracy: 0.8993
 76/102 [=====================>........] - ETA: 0s - loss: 0.2729 - accuracy: 0.8982
 96/102 [===========================>..] - ETA: 0s - loss: 0.2741 - accuracy: 0.8975
102/102 [==============================] - 0s 3ms/step - loss: 0.2744 - accuracy: 0.8973
## Epoch 49/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2932 - accuracy: 0.8926
 21/102 [=====>........................] - ETA: 0s - loss: 0.2762 - accuracy: 0.8971
 39/102 [==========>...................] - ETA: 0s - loss: 0.2715 - accuracy: 0.8991
 58/102 [================>.............] - ETA: 0s - loss: 0.2694 - accuracy: 0.9000
 78/102 [=====================>........] - ETA: 0s - loss: 0.2685 - accuracy: 0.9003
 97/102 [===========================>..] - ETA: 0s - loss: 0.2682 - accuracy: 0.9004
102/102 [==============================] - 0s 3ms/step - loss: 0.2681 - accuracy: 0.9005
## Epoch 50/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3416 - accuracy: 0.8652
 19/102 [====>.........................] - ETA: 0s - loss: 0.3039 - accuracy: 0.8812
 38/102 [==========>...................] - ETA: 0s - loss: 0.2986 - accuracy: 0.8832
 58/102 [================>.............] - ETA: 0s - loss: 0.2939 - accuracy: 0.8854
 77/102 [=====================>........] - ETA: 0s - loss: 0.2907 - accuracy: 0.8870
 96/102 [===========================>..] - ETA: 0s - loss: 0.2884 - accuracy: 0.8882
102/102 [==============================] - 0s 3ms/step - loss: 0.2878 - accuracy: 0.8885
## Epoch 51/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3238 - accuracy: 0.8721
 20/102 [====>.........................] - ETA: 0s - loss: 0.2815 - accuracy: 0.8915
 41/102 [===========>..................] - ETA: 0s - loss: 0.2746 - accuracy: 0.8955
 59/102 [================>.............] - ETA: 0s - loss: 0.2722 - accuracy: 0.8969
 77/102 [=====================>........] - ETA: 0s - loss: 0.2704 - accuracy: 0.8979
 98/102 [===========================>..] - ETA: 0s - loss: 0.2688 - accuracy: 0.8988
102/102 [==============================] - 0s 3ms/step - loss: 0.2685 - accuracy: 0.8989
## Epoch 52/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3163 - accuracy: 0.8672
 21/102 [=====>........................] - ETA: 0s - loss: 0.2907 - accuracy: 0.8895
 39/102 [==========>...................] - ETA: 0s - loss: 0.2810 - accuracy: 0.8940
 58/102 [================>.............] - ETA: 0s - loss: 0.2762 - accuracy: 0.8963
 75/102 [=====================>........] - ETA: 0s - loss: 0.2729 - accuracy: 0.8979
 92/102 [==========================>...] - ETA: 0s - loss: 0.2708 - accuracy: 0.8989
102/102 [==============================] - 0s 3ms/step - loss: 0.2697 - accuracy: 0.8994
## Epoch 53/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2643 - accuracy: 0.9072
 20/102 [====>.........................] - ETA: 0s - loss: 0.2534 - accuracy: 0.9072
 38/102 [==========>...................] - ETA: 0s - loss: 0.2520 - accuracy: 0.9077
 58/102 [================>.............] - ETA: 0s - loss: 0.2518 - accuracy: 0.9078
 77/102 [=====================>........] - ETA: 0s - loss: 0.2521 - accuracy: 0.9077
 96/102 [===========================>..] - ETA: 0s - loss: 0.2527 - accuracy: 0.9073
102/102 [==============================] - 0s 3ms/step - loss: 0.2529 - accuracy: 0.9072
## Epoch 54/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2551 - accuracy: 0.8984
 20/102 [====>.........................] - ETA: 0s - loss: 0.2713 - accuracy: 0.8958
 40/102 [==========>...................] - ETA: 0s - loss: 0.2732 - accuracy: 0.8952
 59/102 [================>.............] - ETA: 0s - loss: 0.2729 - accuracy: 0.8957
 77/102 [=====================>........] - ETA: 0s - loss: 0.2728 - accuracy: 0.8959
 97/102 [===========================>..] - ETA: 0s - loss: 0.2731 - accuracy: 0.8960
102/102 [==============================] - 0s 3ms/step - loss: 0.2732 - accuracy: 0.8960
## Epoch 55/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3738 - accuracy: 0.8428
 22/102 [=====>........................] - ETA: 0s - loss: 0.3064 - accuracy: 0.8777
 42/102 [===========>..................] - ETA: 0s - loss: 0.2951 - accuracy: 0.8840
 61/102 [================>.............] - ETA: 0s - loss: 0.2883 - accuracy: 0.8878
 81/102 [======================>.......] - ETA: 0s - loss: 0.2831 - accuracy: 0.8907
100/102 [============================>.] - ETA: 0s - loss: 0.2794 - accuracy: 0.8927
102/102 [==============================] - 0s 3ms/step - loss: 0.2789 - accuracy: 0.8930
## Epoch 56/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2480 - accuracy: 0.9043
 19/102 [====>.........................] - ETA: 0s - loss: 0.2526 - accuracy: 0.9044
 39/102 [==========>...................] - ETA: 0s - loss: 0.2537 - accuracy: 0.9046
 60/102 [================>.............] - ETA: 0s - loss: 0.2527 - accuracy: 0.9056
 78/102 [=====================>........] - ETA: 0s - loss: 0.2517 - accuracy: 0.9063
 97/102 [===========================>..] - ETA: 0s - loss: 0.2510 - accuracy: 0.9067
102/102 [==============================] - 0s 3ms/step - loss: 0.2509 - accuracy: 0.9068
## Epoch 57/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2699 - accuracy: 0.9131
 19/102 [====>.........................] - ETA: 0s - loss: 0.2607 - accuracy: 0.9046
 38/102 [==========>...................] - ETA: 0s - loss: 0.2566 - accuracy: 0.9056
 56/102 [===============>..............] - ETA: 0s - loss: 0.2561 - accuracy: 0.9054
 74/102 [====================>.........] - ETA: 0s - loss: 0.2569 - accuracy: 0.9047
 95/102 [==========================>...] - ETA: 0s - loss: 0.2572 - accuracy: 0.9043
102/102 [==============================] - 0s 3ms/step - loss: 0.2572 - accuracy: 0.9043
## Epoch 58/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2465 - accuracy: 0.9111
 21/102 [=====>........................] - ETA: 0s - loss: 0.2571 - accuracy: 0.9040
 40/102 [==========>...................] - ETA: 0s - loss: 0.2611 - accuracy: 0.9015
 59/102 [================>.............] - ETA: 0s - loss: 0.2628 - accuracy: 0.9006
 79/102 [======================>.......] - ETA: 0s - loss: 0.2632 - accuracy: 0.9004
 98/102 [===========================>..] - ETA: 0s - loss: 0.2627 - accuracy: 0.9006
102/102 [==============================] - 0s 3ms/step - loss: 0.2625 - accuracy: 0.9007
## Epoch 59/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2180 - accuracy: 0.9287
 20/102 [====>.........................] - ETA: 0s - loss: 0.2520 - accuracy: 0.9074
 38/102 [==========>...................] - ETA: 0s - loss: 0.2531 - accuracy: 0.9066
 57/102 [===============>..............] - ETA: 0s - loss: 0.2537 - accuracy: 0.9061
 76/102 [=====================>........] - ETA: 0s - loss: 0.2552 - accuracy: 0.9052
 94/102 [==========================>...] - ETA: 0s - loss: 0.2560 - accuracy: 0.9047
102/102 [==============================] - 0s 3ms/step - loss: 0.2562 - accuracy: 0.9045
## Epoch 60/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2431 - accuracy: 0.9082
 19/102 [====>.........................] - ETA: 0s - loss: 0.2475 - accuracy: 0.9083
 39/102 [==========>...................] - ETA: 0s - loss: 0.2518 - accuracy: 0.9060
 58/102 [================>.............] - ETA: 0s - loss: 0.2549 - accuracy: 0.9047
 76/102 [=====================>........] - ETA: 0s - loss: 0.2563 - accuracy: 0.9042
 95/102 [==========================>...] - ETA: 0s - loss: 0.2564 - accuracy: 0.9042
102/102 [==============================] - 0s 3ms/step - loss: 0.2563 - accuracy: 0.9042
## Epoch 61/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2437 - accuracy: 0.9160
 20/102 [====>.........................] - ETA: 0s - loss: 0.2387 - accuracy: 0.9131
 40/102 [==========>...................] - ETA: 0s - loss: 0.2410 - accuracy: 0.9116
 59/102 [================>.............] - ETA: 0s - loss: 0.2415 - accuracy: 0.9112
 79/102 [======================>.......] - ETA: 0s - loss: 0.2424 - accuracy: 0.9107
 99/102 [============================>.] - ETA: 0s - loss: 0.2438 - accuracy: 0.9100
102/102 [==============================] - 0s 3ms/step - loss: 0.2440 - accuracy: 0.9099
## Epoch 62/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3460 - accuracy: 0.8623
 21/102 [=====>........................] - ETA: 0s - loss: 0.3238 - accuracy: 0.8745
 39/102 [==========>...................] - ETA: 0s - loss: 0.3025 - accuracy: 0.8835
 59/102 [================>.............] - ETA: 0s - loss: 0.2905 - accuracy: 0.8887
 78/102 [=====================>........] - ETA: 0s - loss: 0.2834 - accuracy: 0.8918
 97/102 [===========================>..] - ETA: 0s - loss: 0.2780 - accuracy: 0.8943
102/102 [==============================] - 0s 3ms/step - loss: 0.2766 - accuracy: 0.8949
## Epoch 63/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2336 - accuracy: 0.9111
 19/102 [====>.........................] - ETA: 0s - loss: 0.2507 - accuracy: 0.9078
 39/102 [==========>...................] - ETA: 0s - loss: 0.2490 - accuracy: 0.9076
 57/102 [===============>..............] - ETA: 0s - loss: 0.2470 - accuracy: 0.9084
 75/102 [=====================>........] - ETA: 0s - loss: 0.2455 - accuracy: 0.9089
 95/102 [==========================>...] - ETA: 0s - loss: 0.2448 - accuracy: 0.9091
102/102 [==============================] - 0s 3ms/step - loss: 0.2447 - accuracy: 0.9092
## Epoch 64/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2456 - accuracy: 0.9062
 20/102 [====>.........................] - ETA: 0s - loss: 0.2508 - accuracy: 0.9053
 39/102 [==========>...................] - ETA: 0s - loss: 0.2555 - accuracy: 0.9032
 57/102 [===============>..............] - ETA: 0s - loss: 0.2566 - accuracy: 0.9026
 77/102 [=====================>........] - ETA: 0s - loss: 0.2563 - accuracy: 0.9026
 96/102 [===========================>..] - ETA: 0s - loss: 0.2560 - accuracy: 0.9028
102/102 [==============================] - 0s 3ms/step - loss: 0.2557 - accuracy: 0.9030
## Epoch 65/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2332 - accuracy: 0.9111
 20/102 [====>.........................] - ETA: 0s - loss: 0.2293 - accuracy: 0.9142
 38/102 [==========>...................] - ETA: 0s - loss: 0.2330 - accuracy: 0.9128
 57/102 [===============>..............] - ETA: 0s - loss: 0.2366 - accuracy: 0.9113
 76/102 [=====================>........] - ETA: 0s - loss: 0.2388 - accuracy: 0.9105
 94/102 [==========================>...] - ETA: 0s - loss: 0.2397 - accuracy: 0.9102
102/102 [==============================] - 0s 3ms/step - loss: 0.2399 - accuracy: 0.9102
## Epoch 66/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2563 - accuracy: 0.9102
 19/102 [====>.........................] - ETA: 0s - loss: 0.2578 - accuracy: 0.9034
 39/102 [==========>...................] - ETA: 0s - loss: 0.2515 - accuracy: 0.9064
 58/102 [================>.............] - ETA: 0s - loss: 0.2479 - accuracy: 0.9080
 76/102 [=====================>........] - ETA: 0s - loss: 0.2456 - accuracy: 0.9091
 95/102 [==========================>...] - ETA: 0s - loss: 0.2438 - accuracy: 0.9099
102/102 [==============================] - 0s 3ms/step - loss: 0.2432 - accuracy: 0.9101
## Epoch 67/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2255 - accuracy: 0.9268
 20/102 [====>.........................] - ETA: 0s - loss: 0.2381 - accuracy: 0.9149
 39/102 [==========>...................] - ETA: 0s - loss: 0.2380 - accuracy: 0.9136
 57/102 [===============>..............] - ETA: 0s - loss: 0.2371 - accuracy: 0.9135
 76/102 [=====================>........] - ETA: 0s - loss: 0.2370 - accuracy: 0.9132
 96/102 [===========================>..] - ETA: 0s - loss: 0.2370 - accuracy: 0.9131
102/102 [==============================] - 0s 3ms/step - loss: 0.2369 - accuracy: 0.9131
## Epoch 68/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2715 - accuracy: 0.8906
 21/102 [=====>........................] - ETA: 0s - loss: 0.2538 - accuracy: 0.9039
 39/102 [==========>...................] - ETA: 0s - loss: 0.2511 - accuracy: 0.9054
 57/102 [===============>..............] - ETA: 0s - loss: 0.2481 - accuracy: 0.9070
 78/102 [=====================>........] - ETA: 0s - loss: 0.2455 - accuracy: 0.9083
 96/102 [===========================>..] - ETA: 0s - loss: 0.2439 - accuracy: 0.9089
102/102 [==============================] - 0s 3ms/step - loss: 0.2435 - accuracy: 0.9091
## Epoch 69/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2203 - accuracy: 0.9199
 19/102 [====>.........................] - ETA: 0s - loss: 0.2396 - accuracy: 0.9092
 37/102 [=========>....................] - ETA: 0s - loss: 0.2395 - accuracy: 0.9098
 57/102 [===============>..............] - ETA: 0s - loss: 0.2382 - accuracy: 0.9107
 76/102 [=====================>........] - ETA: 0s - loss: 0.2372 - accuracy: 0.9114
 95/102 [==========================>...] - ETA: 0s - loss: 0.2364 - accuracy: 0.9118
102/102 [==============================] - 0s 3ms/step - loss: 0.2361 - accuracy: 0.9120
## Epoch 70/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2423 - accuracy: 0.9150
 19/102 [====>.........................] - ETA: 0s - loss: 0.2305 - accuracy: 0.9163
 39/102 [==========>...................] - ETA: 0s - loss: 0.2300 - accuracy: 0.9157
 57/102 [===============>..............] - ETA: 0s - loss: 0.2319 - accuracy: 0.9146
 75/102 [=====================>........] - ETA: 0s - loss: 0.2327 - accuracy: 0.9140
 95/102 [==========================>...] - ETA: 0s - loss: 0.2331 - accuracy: 0.9137
102/102 [==============================] - 0s 3ms/step - loss: 0.2332 - accuracy: 0.9136
## Epoch 71/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2164 - accuracy: 0.9180
 21/102 [=====>........................] - ETA: 0s - loss: 0.2244 - accuracy: 0.9159
 40/102 [==========>...................] - ETA: 0s - loss: 0.2267 - accuracy: 0.9148
 58/102 [================>.............] - ETA: 0s - loss: 0.2270 - accuracy: 0.9148
 78/102 [=====================>........] - ETA: 0s - loss: 0.2269 - accuracy: 0.9149
 98/102 [===========================>..] - ETA: 0s - loss: 0.2270 - accuracy: 0.9150
102/102 [==============================] - 0s 3ms/step - loss: 0.2272 - accuracy: 0.9149
## Epoch 72/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2691 - accuracy: 0.8975
 20/102 [====>.........................] - ETA: 0s - loss: 0.2441 - accuracy: 0.9083
 38/102 [==========>...................] - ETA: 0s - loss: 0.2392 - accuracy: 0.9106
 58/102 [================>.............] - ETA: 0s - loss: 0.2352 - accuracy: 0.9124
 77/102 [=====================>........] - ETA: 0s - loss: 0.2328 - accuracy: 0.9134
 96/102 [===========================>..] - ETA: 0s - loss: 0.2315 - accuracy: 0.9139
102/102 [==============================] - 0s 3ms/step - loss: 0.2312 - accuracy: 0.9140
## Epoch 73/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.3051 - accuracy: 0.8779
 20/102 [====>.........................] - ETA: 0s - loss: 0.2797 - accuracy: 0.8889
 40/102 [==========>...................] - ETA: 0s - loss: 0.2756 - accuracy: 0.8905
 59/102 [================>.............] - ETA: 0s - loss: 0.2710 - accuracy: 0.8927
 77/102 [=====================>........] - ETA: 0s - loss: 0.2669 - accuracy: 0.8947
 97/102 [===========================>..] - ETA: 0s - loss: 0.2631 - accuracy: 0.8966
102/102 [==============================] - 0s 3ms/step - loss: 0.2620 - accuracy: 0.8971
## Epoch 74/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2041 - accuracy: 0.9268
 21/102 [=====>........................] - ETA: 0s - loss: 0.2289 - accuracy: 0.9115
 40/102 [==========>...................] - ETA: 0s - loss: 0.2315 - accuracy: 0.9100
 59/102 [================>.............] - ETA: 0s - loss: 0.2320 - accuracy: 0.9098
 79/102 [======================>.......] - ETA: 0s - loss: 0.2326 - accuracy: 0.9096
 98/102 [===========================>..] - ETA: 0s - loss: 0.2330 - accuracy: 0.9095
102/102 [==============================] - 0s 3ms/step - loss: 0.2331 - accuracy: 0.9095
## Epoch 75/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2470 - accuracy: 0.9082
 20/102 [====>.........................] - ETA: 0s - loss: 0.2579 - accuracy: 0.8997
 38/102 [==========>...................] - ETA: 0s - loss: 0.2532 - accuracy: 0.9017
 57/102 [===============>..............] - ETA: 0s - loss: 0.2481 - accuracy: 0.9040
 76/102 [=====================>........] - ETA: 0s - loss: 0.2449 - accuracy: 0.9054
 95/102 [==========================>...] - ETA: 0s - loss: 0.2432 - accuracy: 0.9061
102/102 [==============================] - 0s 3ms/step - loss: 0.2431 - accuracy: 0.9061
## Epoch 76/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2561 - accuracy: 0.9014
 19/102 [====>.........................] - ETA: 0s - loss: 0.2479 - accuracy: 0.9052
 38/102 [==========>...................] - ETA: 0s - loss: 0.2433 - accuracy: 0.9073
 56/102 [===============>..............] - ETA: 0s - loss: 0.2407 - accuracy: 0.9083
 74/102 [====================>.........] - ETA: 0s - loss: 0.2389 - accuracy: 0.9089
 94/102 [==========================>...] - ETA: 0s - loss: 0.2370 - accuracy: 0.9097
102/102 [==============================] - 0s 3ms/step - loss: 0.2363 - accuracy: 0.9099
## Epoch 77/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2255 - accuracy: 0.9082
 20/102 [====>.........................] - ETA: 0s - loss: 0.2351 - accuracy: 0.9098
 40/102 [==========>...................] - ETA: 0s - loss: 0.2328 - accuracy: 0.9115
 58/102 [================>.............] - ETA: 0s - loss: 0.2323 - accuracy: 0.9118
 76/102 [=====================>........] - ETA: 0s - loss: 0.2317 - accuracy: 0.9120
 96/102 [===========================>..] - ETA: 0s - loss: 0.2306 - accuracy: 0.9123
102/102 [==============================] - 0s 3ms/step - loss: 0.2302 - accuracy: 0.9124
## Epoch 78/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2063 - accuracy: 0.9268
 21/102 [=====>........................] - ETA: 0s - loss: 0.2144 - accuracy: 0.9192
 39/102 [==========>...................] - ETA: 0s - loss: 0.2167 - accuracy: 0.9173
 59/102 [================>.............] - ETA: 0s - loss: 0.2187 - accuracy: 0.9161
 77/102 [=====================>........] - ETA: 0s - loss: 0.2190 - accuracy: 0.9159
 96/102 [===========================>..] - ETA: 0s - loss: 0.2189 - accuracy: 0.9160
102/102 [==============================] - 0s 3ms/step - loss: 0.2189 - accuracy: 0.9160
## Epoch 79/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2092 - accuracy: 0.9189
 19/102 [====>.........................] - ETA: 0s - loss: 0.2072 - accuracy: 0.9204
 37/102 [=========>....................] - ETA: 0s - loss: 0.2082 - accuracy: 0.9204
 57/102 [===============>..............] - ETA: 0s - loss: 0.2085 - accuracy: 0.9205
 75/102 [=====================>........] - ETA: 0s - loss: 0.2083 - accuracy: 0.9207
 93/102 [==========================>...] - ETA: 0s - loss: 0.2080 - accuracy: 0.9208
102/102 [==============================] - 0s 3ms/step - loss: 0.2079 - accuracy: 0.9209
## Epoch 80/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2008 - accuracy: 0.9238
 20/102 [====>.........................] - ETA: 0s - loss: 0.2129 - accuracy: 0.9187
 39/102 [==========>...................] - ETA: 0s - loss: 0.2133 - accuracy: 0.9184
 58/102 [================>.............] - ETA: 0s - loss: 0.2181 - accuracy: 0.9160
 76/102 [=====================>........] - ETA: 0s - loss: 0.2206 - accuracy: 0.9147
 96/102 [===========================>..] - ETA: 0s - loss: 0.2212 - accuracy: 0.9144
102/102 [==============================] - 0s 3ms/step - loss: 0.2212 - accuracy: 0.9144
## Epoch 81/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2101 - accuracy: 0.9160
 21/102 [=====>........................] - ETA: 0s - loss: 0.2130 - accuracy: 0.9197
 40/102 [==========>...................] - ETA: 0s - loss: 0.2111 - accuracy: 0.9204
 59/102 [================>.............] - ETA: 0s - loss: 0.2129 - accuracy: 0.9192
 79/102 [======================>.......] - ETA: 0s - loss: 0.2152 - accuracy: 0.9178
 98/102 [===========================>..] - ETA: 0s - loss: 0.2159 - accuracy: 0.9173
102/102 [==============================] - 0s 3ms/step - loss: 0.2159 - accuracy: 0.9172
## Epoch 82/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2737 - accuracy: 0.8896
 19/102 [====>.........................] - ETA: 0s - loss: 0.2292 - accuracy: 0.9113
 38/102 [==========>...................] - ETA: 0s - loss: 0.2202 - accuracy: 0.9146
 58/102 [================>.............] - ETA: 0s - loss: 0.2174 - accuracy: 0.9157
 77/102 [=====================>........] - ETA: 0s - loss: 0.2158 - accuracy: 0.9164
 95/102 [==========================>...] - ETA: 0s - loss: 0.2148 - accuracy: 0.9169
102/102 [==============================] - 0s 3ms/step - loss: 0.2145 - accuracy: 0.9170
## Epoch 83/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.1945 - accuracy: 0.9209
 19/102 [====>.........................] - ETA: 0s - loss: 0.1950 - accuracy: 0.9243
 39/102 [==========>...................] - ETA: 0s - loss: 0.1989 - accuracy: 0.9231
 58/102 [================>.............] - ETA: 0s - loss: 0.2005 - accuracy: 0.9226
 76/102 [=====================>........] - ETA: 0s - loss: 0.2008 - accuracy: 0.9226
 97/102 [===========================>..] - ETA: 0s - loss: 0.2010 - accuracy: 0.9226
102/102 [==============================] - 0s 3ms/step - loss: 0.2010 - accuracy: 0.9226
## Epoch 84/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.1780 - accuracy: 0.9316
 20/102 [====>.........................] - ETA: 0s - loss: 0.1974 - accuracy: 0.9272
 38/102 [==========>...................] - ETA: 0s - loss: 0.2038 - accuracy: 0.9242
 57/102 [===============>..............] - ETA: 0s - loss: 0.2072 - accuracy: 0.9221
 76/102 [=====================>........] - ETA: 0s - loss: 0.2078 - accuracy: 0.9215
 95/102 [==========================>...] - ETA: 0s - loss: 0.2085 - accuracy: 0.9209
102/102 [==============================] - 0s 3ms/step - loss: 0.2088 - accuracy: 0.9207
## Epoch 85/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2044 - accuracy: 0.9219
 20/102 [====>.........................] - ETA: 0s - loss: 0.2037 - accuracy: 0.9246
 38/102 [==========>...................] - ETA: 0s - loss: 0.2025 - accuracy: 0.9245
 57/102 [===============>..............] - ETA: 0s - loss: 0.2009 - accuracy: 0.9248
 76/102 [=====================>........] - ETA: 0s - loss: 0.2006 - accuracy: 0.9246
 94/102 [==========================>...] - ETA: 0s - loss: 0.2004 - accuracy: 0.9246
102/102 [==============================] - 0s 3ms/step - loss: 0.2002 - accuracy: 0.9246
## Epoch 86/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2300 - accuracy: 0.9033
 19/102 [====>.........................] - ETA: 0s - loss: 0.2064 - accuracy: 0.9200
 39/102 [==========>...................] - ETA: 0s - loss: 0.2016 - accuracy: 0.9220
 59/102 [================>.............] - ETA: 0s - loss: 0.2010 - accuracy: 0.9222
 77/102 [=====================>........] - ETA: 0s - loss: 0.2003 - accuracy: 0.9226
 96/102 [===========================>..] - ETA: 0s - loss: 0.1993 - accuracy: 0.9231
102/102 [==============================] - 0s 3ms/step - loss: 0.1989 - accuracy: 0.9233
## Epoch 87/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.1750 - accuracy: 0.9434
 19/102 [====>.........................] - ETA: 0s - loss: 0.1806 - accuracy: 0.9333
 39/102 [==========>...................] - ETA: 0s - loss: 0.1838 - accuracy: 0.9314
 57/102 [===============>..............] - ETA: 0s - loss: 0.1859 - accuracy: 0.9304
 75/102 [=====================>........] - ETA: 0s - loss: 0.1868 - accuracy: 0.9298
 96/102 [===========================>..] - ETA: 0s - loss: 0.1875 - accuracy: 0.9294
102/102 [==============================] - 0s 3ms/step - loss: 0.1877 - accuracy: 0.9292
## Epoch 88/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2157 - accuracy: 0.9199
 21/102 [=====>........................] - ETA: 0s - loss: 0.1913 - accuracy: 0.9282
 39/102 [==========>...................] - ETA: 0s - loss: 0.1890 - accuracy: 0.9291
 57/102 [===============>..............] - ETA: 0s - loss: 0.1883 - accuracy: 0.9292
 77/102 [=====================>........] - ETA: 0s - loss: 0.1880 - accuracy: 0.9291
 96/102 [===========================>..] - ETA: 0s - loss: 0.1875 - accuracy: 0.9292
102/102 [==============================] - 0s 3ms/step - loss: 0.1873 - accuracy: 0.9293
## Epoch 89/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2129 - accuracy: 0.9121
 19/102 [====>.........................] - ETA: 0s - loss: 0.1903 - accuracy: 0.9262
 38/102 [==========>...................] - ETA: 0s - loss: 0.1878 - accuracy: 0.9279
 59/102 [================>.............] - ETA: 0s - loss: 0.1863 - accuracy: 0.9285
 78/102 [=====================>........] - ETA: 0s - loss: 0.1855 - accuracy: 0.9290
 97/102 [===========================>..] - ETA: 0s - loss: 0.1850 - accuracy: 0.9292
102/102 [==============================] - 0s 3ms/step - loss: 0.1849 - accuracy: 0.9293
## Epoch 90/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.1639 - accuracy: 0.9375
 20/102 [====>.........................] - ETA: 0s - loss: 0.1830 - accuracy: 0.9309
 40/102 [==========>...................] - ETA: 0s - loss: 0.1865 - accuracy: 0.9291
 59/102 [================>.............] - ETA: 0s - loss: 0.1889 - accuracy: 0.9277
 78/102 [=====================>........] - ETA: 0s - loss: 0.1894 - accuracy: 0.9274
 98/102 [===========================>..] - ETA: 0s - loss: 0.1894 - accuracy: 0.9274
102/102 [==============================] - 0s 3ms/step - loss: 0.1893 - accuracy: 0.9274
## Epoch 91/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.1842 - accuracy: 0.9287
 21/102 [=====>........................] - ETA: 0s - loss: 0.1773 - accuracy: 0.9327
 39/102 [==========>...................] - ETA: 0s - loss: 0.1787 - accuracy: 0.9324
 59/102 [================>.............] - ETA: 0s - loss: 0.1817 - accuracy: 0.9313
 79/102 [======================>.......] - ETA: 0s - loss: 0.1850 - accuracy: 0.9298
 97/102 [===========================>..] - ETA: 0s - loss: 0.1864 - accuracy: 0.9292
102/102 [==============================] - 0s 3ms/step - loss: 0.1867 - accuracy: 0.9290
## Epoch 92/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2083 - accuracy: 0.9092
 19/102 [====>.........................] - ETA: 0s - loss: 0.2036 - accuracy: 0.9191
 37/102 [=========>....................] - ETA: 0s - loss: 0.1978 - accuracy: 0.9227
 57/102 [===============>..............] - ETA: 0s - loss: 0.1941 - accuracy: 0.9247
 76/102 [=====================>........] - ETA: 0s - loss: 0.1921 - accuracy: 0.9257
 95/102 [==========================>...] - ETA: 0s - loss: 0.1908 - accuracy: 0.9264
102/102 [==============================] - 0s 3ms/step - loss: 0.1904 - accuracy: 0.9266
## Epoch 93/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.1684 - accuracy: 0.9297
 20/102 [====>.........................] - ETA: 0s - loss: 0.1814 - accuracy: 0.9281
 40/102 [==========>...................] - ETA: 0s - loss: 0.1802 - accuracy: 0.9294
 59/102 [================>.............] - ETA: 0s - loss: 0.1794 - accuracy: 0.9300
 77/102 [=====================>........] - ETA: 0s - loss: 0.1789 - accuracy: 0.9304
 97/102 [===========================>..] - ETA: 0s - loss: 0.1785 - accuracy: 0.9307
102/102 [==============================] - 0s 3ms/step - loss: 0.1784 - accuracy: 0.9307
## Epoch 94/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.1755 - accuracy: 0.9326
 20/102 [====>.........................] - ETA: 0s - loss: 0.1869 - accuracy: 0.9286
 38/102 [==========>...................] - ETA: 0s - loss: 0.1829 - accuracy: 0.9303
 57/102 [===============>..............] - ETA: 0s - loss: 0.1817 - accuracy: 0.9306
 77/102 [=====================>........] - ETA: 0s - loss: 0.1808 - accuracy: 0.9307
 94/102 [==========================>...] - ETA: 0s - loss: 0.1800 - accuracy: 0.9310
102/102 [==============================] - 0s 3ms/step - loss: 0.1796 - accuracy: 0.9312
## Epoch 95/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2223 - accuracy: 0.9111
 19/102 [====>.........................] - ETA: 0s - loss: 0.2039 - accuracy: 0.9205
 37/102 [=========>....................] - ETA: 0s - loss: 0.1943 - accuracy: 0.9250
 58/102 [================>.............] - ETA: 0s - loss: 0.1891 - accuracy: 0.9271
 77/102 [=====================>........] - ETA: 0s - loss: 0.1871 - accuracy: 0.9278
 95/102 [==========================>...] - ETA: 0s - loss: 0.1868 - accuracy: 0.9279
102/102 [==============================] - 0s 3ms/step - loss: 0.1870 - accuracy: 0.9278
## Epoch 96/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2093 - accuracy: 0.9150
 18/102 [====>.........................] - ETA: 0s - loss: 0.1909 - accuracy: 0.9271
 37/102 [=========>....................] - ETA: 0s - loss: 0.1858 - accuracy: 0.9294
 56/102 [===============>..............] - ETA: 0s - loss: 0.1835 - accuracy: 0.9300
 75/102 [=====================>........] - ETA: 0s - loss: 0.1815 - accuracy: 0.9307
 95/102 [==========================>...] - ETA: 0s - loss: 0.1808 - accuracy: 0.9309
102/102 [==============================] - 0s 3ms/step - loss: 0.1811 - accuracy: 0.9307
## Epoch 97/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.1860 - accuracy: 0.9180
 22/102 [=====>........................] - ETA: 0s - loss: 0.2220 - accuracy: 0.9096
 41/102 [===========>..................] - ETA: 0s - loss: 0.2200 - accuracy: 0.9115
 59/102 [================>.............] - ETA: 0s - loss: 0.2155 - accuracy: 0.9140
 79/102 [======================>.......] - ETA: 0s - loss: 0.2113 - accuracy: 0.9161
 99/102 [============================>.] - ETA: 0s - loss: 0.2081 - accuracy: 0.9176
102/102 [==============================] - 0s 3ms/step - loss: 0.2076 - accuracy: 0.9179
## Epoch 98/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2225 - accuracy: 0.9072
 20/102 [====>.........................] - ETA: 0s - loss: 0.1932 - accuracy: 0.9230
 38/102 [==========>...................] - ETA: 0s - loss: 0.1848 - accuracy: 0.9283
 58/102 [================>.............] - ETA: 0s - loss: 0.1812 - accuracy: 0.9306
 77/102 [=====================>........] - ETA: 0s - loss: 0.1795 - accuracy: 0.9314
 95/102 [==========================>...] - ETA: 0s - loss: 0.1789 - accuracy: 0.9317
102/102 [==============================] - 0s 3ms/step - loss: 0.1787 - accuracy: 0.9318
## Epoch 99/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.1515 - accuracy: 0.9395
 19/102 [====>.........................] - ETA: 0s - loss: 0.1795 - accuracy: 0.9313
 38/102 [==========>...................] - ETA: 0s - loss: 0.1789 - accuracy: 0.9313
 56/102 [===============>..............] - ETA: 0s - loss: 0.1791 - accuracy: 0.9310
 74/102 [====================>.........] - ETA: 0s - loss: 0.1787 - accuracy: 0.9310
 93/102 [==========================>...] - ETA: 0s - loss: 0.1780 - accuracy: 0.9313
102/102 [==============================] - 0s 3ms/step - loss: 0.1777 - accuracy: 0.9314
## Epoch 100/100
## 
  1/102 [..............................] - ETA: 0s - loss: 0.2107 - accuracy: 0.9092
 19/102 [====>.........................] - ETA: 0s - loss: 0.1890 - accuracy: 0.9245
 39/102 [==========>...................] - ETA: 0s - loss: 0.1832 - accuracy: 0.9275
 56/102 [===============>..............] - ETA: 0s - loss: 0.1810 - accuracy: 0.9288
 73/102 [====================>.........] - ETA: 0s - loss: 0.1801 - accuracy: 0.9294
 93/102 [==========================>...] - ETA: 0s - loss: 0.1794 - accuracy: 0.9299
102/102 [==============================] - 0s 3ms/step - loss: 0.1791 - accuracy: 0.9301
## <keras.callbacks.History object at 0x7f9d92c380b8>
model.evaluate(X_test, Y_test)
## 
  1/810 [..............................] - ETA: 6:46 - loss: 0.5813 - accuracy: 0.7812
 54/810 [=>............................] - ETA: 0s - loss: 0.1944 - accuracy: 0.9225  
106/810 [==>...........................] - ETA: 0s - loss: 0.1993 - accuracy: 0.9231
157/810 [====>.........................] - ETA: 0s - loss: 0.2002 - accuracy: 0.9222
202/810 [======>.......................] - ETA: 0s - loss: 0.1974 - accuracy: 0.9233
251/810 [========>.....................] - ETA: 0s - loss: 0.1970 - accuracy: 0.9238
302/810 [==========>...................] - ETA: 0s - loss: 0.2013 - accuracy: 0.9216
346/810 [===========>..................] - ETA: 0s - loss: 0.1988 - accuracy: 0.9232
399/810 [=============>................] - ETA: 0s - loss: 0.1999 - accuracy: 0.9233
447/810 [===============>..............] - ETA: 0s - loss: 0.1991 - accuracy: 0.9237
502/810 [=================>............] - ETA: 0s - loss: 0.2010 - accuracy: 0.9231
552/810 [===================>..........] - ETA: 0s - loss: 0.2031 - accuracy: 0.9216
603/810 [=====================>........] - ETA: 0s - loss: 0.2031 - accuracy: 0.9216
650/810 [=======================>......] - ETA: 0s - loss: 0.2013 - accuracy: 0.9225
701/810 [========================>.....] - ETA: 0s - loss: 0.2017 - accuracy: 0.9224
756/810 [===========================>..] - ETA: 0s - loss: 0.2008 - accuracy: 0.9231
799/810 [============================>.] - ETA: 0s - loss: 0.2012 - accuracy: 0.9226
810/810 [==============================] - 1s 1ms/step - loss: 0.2009 - accuracy: 0.9226
## [0.20093511044979095, 0.9226431846618652]